【问题标题】:Django Haystack - are facets limited to 10?Django Haystack - 面数限制为 10 个吗?
【发布时间】:2012-08-30 03:26:01
【问题描述】:

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

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


我正在收集方面:

results.facet_counts()

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

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


我正在使用最新版本的 HaystackElasticSearch


希望有人可以提供帮助! :)

【问题讨论】:

    标签: python django elasticsearch django-haystack


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗨,我不确定答案是否有帮助。我正在尝试调查该库如何与 ElasticSearch 进行通信。也许有 API 日志?
    【解决方案2】:

    您可以将自定义FacetedSearchViewget_queryset() 方法覆盖为:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-01
        • 2018-07-18
        • 2015-03-02
        • 1970-01-01
        • 2020-04-26
        • 2014-03-27
        相关资源
        最近更新 更多