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
をいずれかが私にこれを達成する他の方法を提案することができれば、私はあなたの助けに感謝します。
Djangoを使わずにエラスティックにクエリを作成しようとしましたか? –
@KirillErmolovえええええええええええええええええええええええええんは150msくらいで速かった –