我认为我需要通过Django URL代理我的ElasticSearch连接,以便按用户令牌进行过滤。
因此,我想使用localhost:8000/myapi/elastic/_search,而不是通过localhost:9200/_search。
我不确定如何将它们连接起来。我已经尝试使用序列化程序/视图设置
myapp/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 responseapi/serializers.py
从myapp.search导入TaskIndex
class ElasticSerializer(serializers.ModelSerializer):
class Meta:
model = TaskIndexapi/views.py
class ElasticViewSet(viewsets.ModelViewSet):
queryset = TaskIndex.objects.none()
serializer_class = ElasticSerializerapi/urls.py
router.register(r'elastic', ElasticViewSet)发布于 2017-05-12 13:46:52
这就是我是如何做到的。非常简单的方法:
views.py
from services import elastic_result
class ElasticView(APIView):
permission_classes=[]
def post(self, title):
_search = elastic_result(id, title)
return _search
passservices.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()https://stackoverflow.com/questions/42798470
复制相似问题