Проксируйте мое соединение Elastic Search через Django для фильтрации

Я считаю, что мне нужно проксировать мое соединение ElasticSearch через URL-адрес Django, чтобы выполнять фильтрацию по токену пользователя.

Поэтому вместо того, чтобы идти через localhost:9200/_search, я хочу использовать localhost:8000/myapi/elastic/_search.

Я не уверен, как их подключить. Я пытался использовать настройку сериализаторов/представлений

мое приложение/search.py

class TaskIndex(DocType):
    title = String()
    class Meta:
        index = 'task-index'

# Bulk indexing function, run in shell
def bulk_indexing():
    TaskIndex.init()
    es = Elasticsearch()
    bulk(client=es, actions=(b.indexing() for b in models.Task.objects.all().iterator()))

# Simple search function
def _search(title):
    s = Search().filter('term', title=title.text)
    response = s.execute()
    return response

API/serializers.py

из myapp.search импортировать TaskIndex

class ElasticSerializer(serializers.ModelSerializer):
    class Meta:
        model = TaskIndex

API/views.py

class ElasticViewSet(viewsets.ModelViewSet):
    queryset = TaskIndex.objects.none()
    serializer_class = ElasticSerializer

API/urls.py

router.register(r'elastic', ElasticViewSet)

person Ycon    schedule 14.03.2017    source источник


Ответы (1)


Так вот как я смог этого добиться. Действительно простой метод:

просмотры.py

from services import elastic_result

class ElasticView(APIView):
    permission_classes=[]
    def post(self, title):
        _search = elastic_result(id, title)
        return _search
        pass

services.py

import requests
import json

def elastic_result(id, request):
    requestdata = json.loads(request.body)
    r = requests.post('http://localhost:9200/_search', json=requestdata)
    items = r.json()
    return Response(items)

urls.py

import ElasticView
url(r'^elastic/_search', ElasticView.as_view()
person Ycon    schedule 12.05.2017