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 个条款外所有条款都需要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值