0

私はdjango-haystackが私のファセットのニーズに適しているかどうかを確認しようとしています。現在、ファセットの近くに数値を表示したいと思います。ドキュメントにモデルが表示されているが、ファセット用の追加フィールドがあるとします(たとえば、作成者がメモを書き込むスタイル...たとえば、スタイルはクラシックまたはモダンです)。したがって、インデックスは次のようになります。

class NoteIndex(SearchIndex, indexes.Indexable):
    text = CharField(document=True, use_template=True)
    author = CharField(model_attr='user', faceted=True)
    style = CharField(model_attr='style', faceted=True)
    pub_date = DateTimeField(model_attr='pub_date')

次に、検索クエリセットを作成し、ファセット作成者(例:john)に絞り込みます。ここで、ジョンと一緒に別の著者を選択した場合に表示される製品の数の見積もりを表示したいと思います(例:+10記事)。スタイルからファセットを追加することについての同じ質問...これを行うにはどうすればよいですか。SearchBEはelasticsearchです。

4

1 に答える 1

1

SearchQuerySetのfacet_countsメソッドは、必要なことを実行します。

results = SearchQuerySet().filter(text='some product').facet('author')
counts = results.facet_counts()
author_results = counts['fields']['author']
author_counts = {author: num_products for author, num_products in author_results}

次に、ジョンの製品数と別の著者の製品数を合計できます。両方に検索範囲を広げると、製品の数がわかります。

num_john_products = author_counts.get('John', 0)
num_bob_products = author_counts.get('Bob', 0)
total = num_john_products + num_bob_products

または、最も多くの製品を使用しているJohn以外の著者を検索し、その著者も検索に含める場合は、結果の数を表示することもできます。

author_counts.pop('John')
most_popular_author = max([(count, author) for author, count in author_counts])
count, author = most_popular_author
total_john_and_most_popular = num_john_products + count
于 2013-01-25T22:05:32.413 に答える