2

我正在索引产品列表,每个产品都有一个类别列表。类别大约1000个。

在搜索页面中,我想列出所有超过 1 个结果的类别。


我正在收集方面:

results.facet_counts()

不幸的是,这只是返回前 10 个类别!

我似乎找不到让它返回更多的方法。


我正在使用最新版本的HaystackElasticSearch


希望有人能帮忙!:)

4

3 回答 3

2

您可以在 json 查询中指定 facet 的大小,即您将返回的条目数:

{
    "query" : {
        "match_all" : {  }
    },
    "facets" : {
        "tag" : {
            "terms" : {
                "field" : "tag",
                "size" : 10
            }
        }
    }
}

如果要取回所有条目,则需要配置一个较高的值。不确定如何将此参数添加到您正在使用的库中。希望答案无论如何都会有用。

于 2012-09-05T13:17:51.693 回答
1

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 包源代码

于 2018-10-17T09:50:52.507 回答
0

现在它们限制为 100 个,请参阅https://github.com/toastdriven/django-haystack/issues/658

于 2012-10-19T15:49:41.200 回答