0

当谈到“性能差异”时,我到目前为止还没有读到任何可靠的东西。

基于其官方文档,在bool 查询中使用过滤器

子句(查询)必须出现在匹配的文档中。但是与必须不同,查询的分数将被忽略。过滤器子句在过滤器上下文中执行,这意味着忽略评分并考虑缓存子句。

至于恒分查询

过滤器查询不计算相关性分数。为了提高性能,Elasticsearch 会自动缓存常用的过滤器查询。


只是猜测

常量查询不会计算(TF-IDF或更高级的algs),而bool查询会计算但返回0(忽略它);所以常量查询的性能更高。

此外,当涉及到指定分数时,您必须使用常量分数查询而不是只会返回 0 的布尔查询。

我刚读到的 QA:Elasticsearch : constant_score query vs bool.filter query

4

1 回答 1

0

不,没有性能差异,因为它们是相同的。

再次基于其讨论过滤器上下文的官方文档:

在过滤器上下文中,查询子句回答“此文档是否匹配此查询子句?”的问题。答案很简单,是或否——<strong>不计算分数。

只要将查询子句传递给过滤器参数(例如 bool 查询中的 filter 或 must_not 参数、constant_score 查询中的过滤器参数或过滤器聚合),过滤器上下文就会生效。

于 2020-02-05T07:41:46.530 回答