私は、本、著者、イベント、およびビデオモデル内を検索するプロジェクトの完全なサイト検索にhaystackを使用しています。
次に、Booksモデルに対してのみ検索したいメインの本のページがあります。
私はこの投稿を見つけました: Haystackで特定のタイプのインデックス付きオブジェクトのみを返す方法
しかし、それは私にとってはうまくいかないようです。単純なバックエンドを使用してローカルでテストしていますが、いくつかの問題があることはわかっていますが、これが関連しているかどうかはわかりません。
私のsearch_indexes.pyファイルは次のようになります。
class BookSearchIndex (SearchIndex):
text = CharField(document=True, use_template=True)
title_web = CharField(model_attr='title_web', boost=1.125)
on_sale_date = CharField(model_attr='on_sale_date')
def index_queryset(self):
return Book.objects.active().filter(publish_level='published')
site.register(Book, BookSearchIndex)
私の見解では、検索クエリが渡された場合は、そのクエリを含む本のみを返します。それ以外の場合は、すべての本を表示します。
search = self.request.GET.get('search', None)
if search:
clean_query = SearchQuerySet().query.clean(search)
sqs = SearchQuerySet().models(Book).filter(content=clean_query).order_by('-on_sale_date')
else:
sqs = SearchQuerySet().models(Book).order_by('-on_sale_date)
検索は検索クエリに基づいてアイテムを正しくフィルタリングしますが、それでもすべてのモデルが返されます。ブックモデルだけに限定されているわけではありません。
この部分は効果がないようです:
SearchQuerySet().models(Book)
誰かが私が間違っていることを理解するのを手伝ってもらえますか?