欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 18.Elasticsearch 7.15 Query DSL 之 bool查询

18.Elasticsearch 7.15 Query DSL 之 bool查询

2025/4/30 8:03:04 来源:https://blog.csdn.net/aaygj/article/details/145285465  浏览:    关键词:18.Elasticsearch 7.15 Query DSL 之 bool查询

bool查询简介

布尔查询允许使用布尔逻辑(AND, OR, NOT)将多个查询子句组合成复杂查询,是Elasticsearch查询DSL的一部分。bool 查询映射到 Lucene BooleanQuery。它使用一个或多个布尔子句构建,这些布尔子句包括:

布尔子句类型描述
must子句(查询)必须出现在匹配的文档中,并对得分做出贡献。在 must 下定义的每个查询都是逻辑 “AND”,只返回与所有指定查询匹配的文档。
must_not排除匹配这些子句的文档。子句在filter上下文中执行,不影响评分。由于评分会被忽略,因此所有文档都会返回 0 分。在 must_not 下定义的每个查询都是逻辑 “NOT”,只返回不匹配任何指定查询的文档。
should子句(查询)应出现在匹配文档中。在 should 下定义的每个查询都起到逻辑 "OR "的作用,返回与任何指定查询匹配的文档。
filter子句(查询)必须出现在匹配文档中。但与must不同的是,查询的得分将被忽略。filter子句是在filter上下文中执行的,这意味着评分会被忽略,而结果可以被缓存以提高性能。filter下定义的每个查询都是逻辑 “AND”,只返回与所有指定查询匹配的文档。

must 和 should 子句具有逻辑 AND、OR 运算符的功能,有助于对结果进行评分。不过,这些结果不会被缓存以加快检索速度。相比之下,filter 和 must_not 子句用于包含或排除结果,不会影响得分,除非在 constant_score 查询中使用(会缓存结果)。

bool 查询采用 "多多益善 "的方法,因此每个匹配的 must 或 should 子句的得分都会相加,从而得出每个文档的最终 _score 分数。

例子

POST _search
{"query": {"bool" : {"must" : {"term" : { "user.id" : "kimchy" }},"filter": {"term" : { "tags" : "production" }},"must_not" : {"range" : {"age" : { "gte" : 10, "lte" : 20 }}},"should" : [{ "term" : { "tags" : "env1" } },{ "term" : { "tags" : "deployed" } }],"minimum_should_match" : 1,"boost" : 1.0}}
}

minimum_should_match参数

您可以使用 minimum_should_match 参数指定返回文档中必须匹配的 should 子句的数量或百分比。
如果 bool 查询至少包含一个 should 子句,而没有 mustfilter 子句,则默认值为 1,否则默认值为 0。

类型示例值描述
正整数3表示一个固定值,与should子句的数量无关。
负整数-2表示should子句总数减去该数字后为必选子句。
百分比75%表示should子句总数的百分比。根据百分比计算出的数字四舍五入后用作最小值。
负百分比-25%表示可选条款总数的这一百分比可能缺失。从总数中减去该百分比计算出的数字后,再向下取整,以确定最小值。
组合3<90%一个正整数,后面跟一个小于符号,再后面跟任何一个前面提到的指定符,就是一个条件指定。它表示如果可选条款的数量等于(或小于)该整数,则所有条款都是必需的,但如果大于该整数,则适用该规范。在本例中:如果有 1 到 3 个条款,则所有条款都是必填的,但如果有 4 个或更多条款,则只有 90% 的条款是必填的。
多组合2<-25% 9<-3可以用空格分隔多个条件说明,每个条件说明只对大于前一个条件说明的数字有效。在此示例中:如果有 1 或 2 个条款,则两个条款都需要;如果有 3-9 个条款,则除 25% 外所有条款都需要;如果有超过 9 个条款,则除 3 个条款外所有条款都需要。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词