2017-03-14 13 views
0

ユーザトークンによるフィルタリングを行うために、私はElasticSearch接続をDjango URLでプロキシする必要があると信じています。フィルタリングのためにDjango経由でMy Elastic Search接続をプロキシする

localhost:9200/_searchを経由する代わりに、localhost:8000/myapi/elastic/_searchを使用します。

接続方法が不明です。私はmyapp.search輸入TaskIndexからシリアライザ/ビューの設定

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 response 

API/serializers.py

を使用してみました

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) 

答えて

0

このように私はそれを達成できました。本当に簡単な方法:

views.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() 
関連する問題