【问题标题】:elasticsearch number of facets returnedelasticsearch 返回的方面数
【发布时间】:2012-09-05 15:57:08
【问题描述】:

我有使用 elasticsearch 0.19.9 的多面查询。但是,我想返回所有计数 > 0 的方面。

根据文档,我应该能够:

{
    "query" : {
        "match_all" : {  }
    },
    "facets" : {
        "tag" : {
            "terms" : {
                "field" : "tag",
                "all_terms" : true
            }
        }
    }

}

据我了解,即使计数为 0,这也应该给我所有方面。

但是,这仍然只返回计数前 10 个方面。这是默认大小。唯一似乎会影响返回的构面数量的是通过实际设置"size" : N,其中N 是将返回的构面数量。

我可以将其设置为一个非常高的数字,但这似乎是 hack-ish。

关于我可能做错了什么有什么想法吗?

【问题讨论】:

    标签: elasticsearch faceted-search


    【解决方案1】:

    你没有做错任何事。你猜对了!在 github 上有一个 open issue 以使术语方面类似于 Terms Stats facet ,它允许您设置 size=0 以获取所有术语。现在你只需要使用一个高值,这有点棘手,我同意。另一方面,请注意不要返回太多条目!

    【讨论】:

    • 感谢您的反馈...尽管这不是我想听到的。
    • 我认为常见的问题实际上是如何在执行术语方面后过滤掉计数大于 0 的术语。即计数 > 0。方面术语给出计数,但我们也想过滤计数。
    【解决方案2】:
    {
        "query" : {
            "match_all" : {  }
        },
        "facets" : {
            "tag" : {
                "terms" : {
                    "field" : "tag",
                    "size" : 2147483647,
                    "all_terms" : false
                }
            }
        }
    }
    

    删除“count: 0”的唯一方法是将“all_terms”设置为 false,并在 Elasticsearch 实例中将您的大小数字设置为尽可能高和不可能(上面的示例是最大的有符号值PHP中的整数可以有)。

    这可能不是最好的方法,但这是迄今为止唯一已知的方法。 Facet 过滤器目前不适用于此功能(除非他们更新和改进了 Elasticsearch 来做到这一点)。

    【讨论】:

    • 我没有太多的术语。这种方法对我来说非常有效。搜索结果足够快。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    相关资源
    最近更新 更多