返されたさまざまな model_names (クラス) に基づいて結果をファセットしたいと考えています。これを行う簡単な方法はありますか?
1422 次
3 に答える
5
SearchIndex
この情報を含むフィールドを追加しようとしましたか? 例えば
class NoteIndex(SearchIndex, indexes.Indexable):
title = CharField(model_attr='title')
facet_model_name = CharField(faceted=True)
def get_model(self):
return Note
def prepare_facet_model_name(self, obj):
return "note"
class MemoIndex(SearchIndex, indexes.Indexable):
title = CharField(model_attr='title')
facet_model_name = CharField(faceted=True)
def get_model(self):
return Memo
def prepare_facet_model_name(self, obj):
return "memo"
など、検索インデックスごとに異なる文字列を返すだけです。ミックスインを作成して、返されたモデルの名前を返すこともできget_model
ます。
このフィールドを各SearchIndex
定義に追加したと仮定すると、メソッドを結果にチェーンするだけです。facet
results = form.search().facet('facet_model_name')
このfacet_counts
メソッドは、ファセット フィールドと各ファセット値 (この場合はモデル名) の結果数を含むディクショナリを返します。
ここでのフィールドはmodel_name
、Haystack によって追加されたフィールドと競合する可能性を避けるために、冗長にラベル付けされていることに注意してください。ファセットではありません。複製すると競合が発生するかどうかはわかりません。
于 2012-10-18T17:07:34.223 に答える
0
ドキュメントには、これに関する非常に優れたウォークスルーがあります。
最低限必要なもの:
- フィールド
faceted=True
のパラメーターに追加することです。model_names
- スキーマとインデックスを再構築します。
.facet('model_names')
ファセットしたい SearchQuerySet に追加します。
質問に関する詳細な説明により、より完全な回答が可能になります。
于 2015-10-15T01:26:14.920 に答える