我正在索引产品列表,每个产品都有一个类别列表。类别大约1000个。
在搜索页面中,我想列出所有超过 1 个结果的类别。
我正在收集方面:
results.facet_counts()
不幸的是,这只是返回前 10 个类别!
我似乎找不到让它返回更多的方法。
我正在使用最新版本的Haystack和ElasticSearch。
希望有人能帮忙!:)
我正在索引产品列表,每个产品都有一个类别列表。类别大约1000个。
在搜索页面中,我想列出所有超过 1 个结果的类别。
我正在收集方面:
results.facet_counts()
不幸的是,这只是返回前 10 个类别!
我似乎找不到让它返回更多的方法。
我正在使用最新版本的Haystack和ElasticSearch。
希望有人能帮忙!:)
您可以在 json 查询中指定 facet 的大小,即您将返回的条目数:
{
"query" : {
"match_all" : { }
},
"facets" : {
"tag" : {
"terms" : {
"field" : "tag",
"size" : 10
}
}
}
}
如果要取回所有条目,则需要配置一个较高的值。不确定如何将此参数添加到您正在使用的库中。希望答案无论如何都会有用。
get_queryset()
您可以将自定义方法覆盖FacetedSearchView
为:
def get_queryset(self):
options = {"size": 0} #unlimited results, use with caution
qs = super().get_queryset()
for field in self.facet_fields:
qs = qs.facet(field, **options)
return qs
您还可以定义一个全局设置ELASTIC_FACET_SIZE
并使用它。
from settings import ELASTIC_FACET_SIZE
def get_queryset(self):
options = {"size": ELASTIC_FACET_SIZE} #unlimited results, use with caution
qs = super().get_queryset()
for field in self.facet_fields:
qs = qs.facet(field, **options)
return qs
这样你就不必弄乱 haystack 包源代码
现在它们限制为 100 个,请参阅https://github.com/toastdriven/django-haystack/issues/658