5

返されたさまざまな model_names (クラス) に基づいて結果をファセットしたいと考えています。これを行う簡単な方法はありますか?

4

3 に答える 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

ドキュメントには、これに関する非常に優れたウォークスルーがあります。

最低限必要なもの:

  1. フィールドfaceted=Trueのパラメーターに追加することです。model_names
  2. スキーマとインデックスを再構築します。
  3. .facet('model_names')ファセットしたい SearchQuerySet に追加します。

質問に関する詳細な説明により、より完全な回答が可能になります。

于 2015-10-15T01:26:14.920 に答える