ElasticSearch minimum_should_match 参数详解

一 minimum_should_match 参数是什么?

minimum_should_match :可以使用 minimum_should_match 参数来指定返回文档 必须(must) 匹配的should子句的数量或百分比。可以称他-最小匹配度
如果 bool 查询至少包含一个 should 子句,并且没有 must 或 filter 子句,则默认值为 1。 否则,默认值为 0。

二 minimum_should_match 如何使用?

minimum_should_match参数一般放到should叶子查询后。
bool 查询映射到 Lucene 的 BooleanQuery。 它使用一个或多个布尔子句构建,每个子句都有一个类型的出现。 出现的类型包括:

表格描述
must该子句(查询)必须出现在匹配的文档中,并且将参与计算得分。
filter该子句(查询)必须出现在匹配的文档中。 然而,与 must 不同,该查询的分数将被忽略。 filter 子句在 filter 的上下文中执行,这意味着该字句的评分会被忽略,但会考虑对该字句进行缓存。
should该子句(查询) 应该(should) 出现在匹配的文档中。
must_not该子句(查询)不能出现在匹配的文档中。 该子句在 filter 的上下文中执行,这意味着该字句的评分会被忽略,但会考虑对该字句进行缓存。 因为评分被忽略,所以所有文档都返回0分。

bool 查询采用匹配度(more-matches-is-better)的方法,因此每个匹配的 must 或 should 子句的分数将被加在一起,以提供每个文档的最终的_score。

POST _search
{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "user" : "kimchy" }
      },
      "filter": {
        "term" : { "tag" : "tech" }
      },
      "must_not" : {
        "range" : {
          "age" : { "gte" : 10, "lte" : 20 }
        }
      },
      "should" : [
        { "term" : { "tag" : "wow" } },
        { "term" : { "tag" : "elasticsearch" } }
      ],
      "minimum_should_match" : 1,
      "boost" : 1.0
    }
  }
}

3.为什么/什么场景需要加minimum_should_match这个参数?

  1. 可以使用 minimum_should_match 参数来指定返回文档 必须(must) 匹配的should子句的数量或百分比。
  2. minimum_should_match 参数取值说明:
类型示例描述
整数3表示一个固定值,与可选子句的数量无关。
负整数-2表示可选子句的总数,减去这个数目应该是强制性的。
百分比75%表示可选子句总数的这个百分比是必需的。根据百分比计算出的数字被向下舍入并用作最小值。
负百分比-25%表示可选子句总数的这个百分比可以缺失。 从百分比中计算出的数字向下四舍五入,然后从总数中减去以确定最小值。
组合3<90%一个正整数,后面跟小于号,再跟前面提到的任意一个说明符,这是一个条件规范。 它表示:如果可选子句的数量等于(或小于)整数,则它们都是必需的;但是如果可选子句的数量大于整数,则此规范适用。 在这个例子中:如果有 1 ~ 3 个子句,它们都是必需的,但是对于4个或更多个子句,只有90%是必需的。
多个组合2<-25% 9<-3多个条件规范可以用空格分隔,每个条件规范只对大于它前面的数字有效。 在这个例子中:如果有 1 ~ 2 个条款,两者都是必需的;如果有 3 ~ 9 个条款,除了 25% 都是必需的;如果有 9 个以上的条款,除了 3 都是必需的。

注意:
在处理百分比时,负值可用于在边缘(edge)情况下获得不同的行为。 在处理 4 个子句时,75% 和 -25% 的意思是一样的,但在处理 5 个子句时,75% 表示需要3个子句,而 -25% 表示需要 4 个子句。

如果基于规范的计算确定不需要可选子句,那么关于 bool 查询的常规规则在搜索时仍然适用(不包含必需子句的 bool 查询仍然必须匹配至少一个可选子句)

无论计算结果是多少,都不会使用大于可选子句数的值或小于1的值。 (即:无论计算结果的结果有多低或多高,要求的最小匹配数永远不会低于1或大于子句数。)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值