1

model.py検索のためにGET REST APIを作成するためにHaystackをDjango Rest Frameworkに統合するにはどうすればよいですか?

class Item(models.Model): 
     name=models.CharField(max_length=50) 
     company=models.CharField(max_length=100) 

search_indexes.py

class ItemIndex(indexes.SearchIndex, indexes.Indexable): 
      text = indexes.CharField(document=True, use_template=True) 
      name=indexes.CharField(model_attr='name') 
      company=indexes.CharField(model_attr='company') 

      def get_model(self): 
       return Item 

      def index_queryset(self, using=None): 
       return self.get_model().objects.all() 

serializer.py

class ItemSearchSerializer(serializers.Serializer): 
    text = serializers.CharField() 
    name=serializers.CharField() 
    company=serializers.CharField() 

views.py

class ItemSearchViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): 
    serializer_class = ItemSearchSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 

    def get_queryset(self): 
     request = self.request 
     queryset = EmptySearchQuerySet() 

     if request.GET.get('q', ''): 
      query = request.GET.get('q', '') 
      queryset =SearchQuerySet().filter(content=query); 
     return queryset 

そしてurl.pyに私が追加:

router.register(r'searchquery', views.ItemSearchViewSet, base_name='searchquery') 

を同様に郵便配達からのGETリクエストを作ることにします。showとして、必要に応じて

http://127.0.0.1:8000/searchquery/?q=appは、私が応答を取得しています以下。

{ 
    "count": 2, 
    "next": null, 
    "previous": null, 
    "results": [ 
    { 
     "text": "apple\ndjflkj", 
     "id": 14, 
     "name": "apple", 
     "mrp": "45.000000", 
     "company": "djflkj", 
     "imageid": "jfhi", 
     "edible": false, 
     "discount": "0.000000", 
     "deliverable": true, 
     "seller_uid": "ljhkh", 
     "category": "ldjhgjfdk" 
    }, 
    { 
     "text": "app\nhuhiu", 
     "id": 16, 
     "name": "app", 
     "mrp": "78.000000", 
     "company": "huhiu", 
     "imageid": "iyiugiy", 
     "edible": false, 
     "discount": "45.000000", 
     "deliverable": true, 
     "seller_uid": "hjh", 
     "category": "hhl" 
    } 
    ] 
} 

しかしREPONSE時間が非常に遅いそれは周りの2700ミリ秒毎回、 を取り、私はそれを速くしたいです。弾性検索の応答は非常に速いので しかし、私は間違って何をしているのかわかりません。わかりませんが、 の理由が原因である可能性があります:1)Haystackは djangoのために作られていますので、django restフレームワークと統合すると、遅くなることがあります 。 2)私は に追加無料盆栽弾性検索のherokuを使用しており、それはちょうど125 MBのメモリを持っています。

これは私が盆栽弾性検索に接続しています方法です(setting.py)

ES_URL = urlparse('https://******@pine-1455731.us-east1.bonsaisearch.net') 
print ES_URL 
HAYSTACK_CONNECTIONS = { 
    'default': { 
     'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', 
     'URL': ES_URL.scheme + '://' + ES_URL.hostname + ':443', 
     'INDEX_NAME': 'haystack', 
    }, 
} 

if ES_URL.username: 
    HAYSTACK_CONNECTIONS['default']['KWARGS'] = {"http_auth": ES_URL.username + ':' + ES_URL.password} 

すべてのヘルプは理解されるであろう。私は弾性検索には新しいです。私はアンドロイドアプリケーションの名前で製品を検索するために弾力的な検索をしたい。 これが正しい検索方法であるかどうかはわかりません。私は検索したい製品の名前を入力すると思ったので、GETリクエストを送信して関連するすべての製品を入手します。

私は、Pythonのプロフィールはこちらでご覧くださいでした:gist

をいずれかが私にこれを達成する他の方法を提案することができれば、私はあなたの助けに感謝します。

+0

Djangoを使わずにエラスティックにクエリを作成しようとしましたか? –

+0

@KirillErmolovえええええええええええええええええええええええええんは150msくらいで速かった –

答えて

-1

検索応答があるため、このコードの遅い:

def index_queryset(self, using=None): 
    return self.get_model().objects.all() 

index_querysetは、あなたが実際にすべてのモデルオブジェクトを返すされているクエリセットを返すことになっています。このメソッドは、検索で返されるすべての項目に対して呼び出されます。

+0

誰かが理由を説明することができます! – Ashim

関連する問題