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。现在我想显示如果我将与 John 一起选择另一位作者(例如 +10 篇文章)将出现多少产品的估计值。关于从样式中添加额外方面的同样问题......我该怎么做。搜索 BE 是弹性搜索。

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}

然后,您可以将 John 的产品数量和其他作者的产品数量相加。如果您要将搜索范围扩大到两者,这将为您提供产品数量:

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 回答