django haystackクエリーリアルタイム反映
12690 ワード
お客様がC、R、U、Dなどの「ブランド」に関連するオブジェクトを提供するように要求しても.
ブラウザで結果をリアルタイムで反映できないという問題が発生しました.
search setに格納されているクエリーセットをキャッシュする
強引に評価した.
このような問題は確かに解決した.
しかし、このような状態を維持することはできません.
テストサーバは現在AWSを使用してキャッシュを準備しています.
このキャッシュにより,過去に格納された一時キャッシュがリアルタイム性に影響を及ぼすと考えられる.
1回目の試みと繰返しアプリケーションでは,2回目の試みが有効であるか否かを知ることが困難であるため,評価したコードについて注釈処理を行った.
結果は失敗
空のライブラリのキャッシュを削除し、追加の試行も行いましたが、解決しませんでした.
でもそれが正解
その後haystack公式ファイルをよく読みました
そこで、次のようにコードを変更しました.index querysetメソッドがクリアされました.
ブラウザで結果をリアルタイムで反映できないという問題が発生しました.
1.最初の試み
queryset evaluation
class BrandSearch(HaystackViewSet):
index_models = [models.Brand]
serializer_class = BrandSearchSerializer
"""
List a queryset.
"""
def list(self, request, *args, **kwargs):
search_set = SearchQuerySet().all()
## force evaluate
search_set.count()
brand_name = request.query_params['brand_name']
brand_set_1 = search_set.filter(text__startswith=brand_name)
brand_set_2 = search_set.filter(text__contains=brand_name)
brand_set = brand_set_1 | brand_set_2
serializer = self.get_serializer(brand_set, many=True)
return Response(serializer.data)
これはお勧めしない方法だと知っていますが.search setに格納されているクエリーセットをキャッシュする
強引に評価した.
このような問題は確かに解決した.
しかし、このような状態を維持することはできません.
2.2回目の試み
@method_decorator(never_cache, name='dispatch')
class BrandSearch(HaystackViewSet):
index_models = [models.Brand]
serializer_class = BrandSearchSerializer
"""
List a queryset.
"""
def list(self, request, *args, **kwargs):
search_set = SearchQuerySet().all()
## force evaluate
#search_set.count()
brand_name = request.query_params['brand_name']
brand_set_1 = search_set.filter(text__startswith=brand_name)
brand_set_2 = search_set.filter(text__contains=brand_name)
brand_set = brand_set_1 | brand_set_2
serializer = self.get_serializer(brand_set, many=True)
return Response(serializer.data)
レコーダを適用しました.テストサーバは現在AWSを使用してキャッシュを準備しています.
このキャッシュにより,過去に格納された一時キャッシュがリアルタイム性に影響を及ぼすと考えられる.
1回目の試みと繰返しアプリケーションでは,2回目の試みが有効であるか否かを知ることが困難であるため,評価したコードについて注釈処理を行った.
結果は失敗
空のライブラリのキャッシュを削除し、追加の試行も行いましたが、解決しませんでした.
3.3回目の試み(feat.成功)
search_indexes.py
修正class BrandIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
kor_letters = indexes.CharField(model_attr="kor_letters")
kor_name = indexes.CharField(model_attr="kor_name")
eng_name = indexes.CharField(model_attr="eng_name")
autocomplete = indexes.EdgeNgramField()
def get_model(self):
return models.Brand
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.all()
その後、search_indexes.py
を修正しました.でもそれが正解
その後haystack公式ファイルをよく読みました
index_queryset
メソッドを提供しており、将来の日付になってから結果を表示できる機能だそうです.そこで、次のようにコードを変更しました.index querysetメソッドがクリアされました.
class BrandIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
kor_letters = indexes.CharField(model_attr="kor_letters")
kor_name = indexes.CharField(model_attr="kor_name")
eng_name = indexes.CharField(model_attr="eng_name")
autocomplete = indexes.EdgeNgramField()
def get_model(self):
return models.Brand
haystack公式ファイルソース:https://django-haystack.readthedocs.io/en/master/tutorial.html#handling-dataReference
この問題について(django haystackクエリーリアルタイム反映), 我々は、より多くの情報をここで見つけました https://velog.io/@khh180cm/django-haystack-검색어-실시간-반영テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol