ES中 minimum_should_match 的用法和误区

背景
写这篇文章是因为有个同学在群里发了这么一张截图,图中讲的两点关于``的描述,我看了一眼,两个都是错的。


目前互联网上的文章质量参差不齐,这也算是为了提高网络博客的质量进一己之力吧。


上述截图中的两个认知误区
1、不能简单的说 7.0 版本之后 默认值是 0 或者 1
minimum_should_match是ES组合查询中的一个常用参数,参数指定should子句返回的文档必须匹配的子句的数量或百分比。注意这里可以输具体的数量,也可以是百分数指定。并且满足以下两个条件:

如果bool查询包含至少一个should子句,而没有must或 filter子句,则默认值为1。即此时minimum_should_match如果没有显示的配置,should子句中的条件必须至少满足一个。
如果bool查询包包含must或 filter子句,则minimum_should_match默认值为0,即:此时minimum_should_match如果没有显示的配置,此时should子句中可以不满足任何条件。
2、minimum_should_match并不是非用不可
minimum_should_match可以控制查询精度,在should和must联合查询查询时必须使用”,这句话的描述也存在问题。下面通过一个习题案例,来证明:

Task:
假设有movie_data索引包含如下文档:

{
  "minutes": 136,
  "movie_id": "1893",
  "title": "Star Wars: Episode I - The Phantom Menace",
  "tags": [
    "prophecy",
    "senate",
    "queen",
    "taskmaster",
    "galaxy",
    "apprentice",
    "taxes",
    "space opera"
  ],
  "revenue": 924317558,
  "release_date": "1999-05-19T06:00:00.000Z",
  "budget": 115000000,
  "avg_score": 6.3
}
在movie_data索引上写一个单独的搜索,满足以下要求:

title 字段包含me或my
tags字段带有romantic comedy标签的文档得分权重高于标签中不包含romantic comedy标签的文档。
答案

GET movie_data/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "my me"
          }
        }
      ],
      "should": [
        {
          "match": {
            "tags.keyword": {
              "query": "romantic comedy",
              "boost": 10
            }
          }
        }
      ]
    }
  }
}
分析

这里只针对should子句展开分析,也就是题目的第二个要求。此题答案中同事包含了must和should子句。

题目中只是说tags字段如果带有romantic comedy标签,那么它的得分权重更高。但是并没有要求带有romantic comedy标签是个必要条件。换句话说,就是带有romantic comedy标签,那么提高评分权重,如果不带,那么什么也不做。

答案中并未显示的配置minimum_should_match参数,所以此时minimum_should_match的默认值是0。即should子句中的条件可以完全不满足。也就是说should子句不会对最终结果的文档数产生影响。那么当前子句的语义则为:带有romantic comedy标签的文档,权重提升10倍,如果不带,也没有关系。

推荐阅读:

ES中的bool query深层次解读
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/wlei0618/article/details/127577614

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值