• ES中 minimum_should_match 的用法和误区


    背景

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

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

    上述截图中的两个认知误区

    1、不能简单的说 7.0 版本之后 默认值是 0 或者 1

    minimum_should_match是ES组合查询中的一个常用参数,参数指定should子句返回的文档必须匹配的子句的数量或百分比。注意这里可以输具体的数量,也可以是百分数指定。并且满足以下两个条件:

    • 如果bool查询包含至少一个should子句,而没有must或 filter子句,则默认值为1。即此时minimum_should_match如果没有显示的配置,should子句中的条件必须至少满足一个。
    • 如果bool查询包包含mustfilter子句,则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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    movie_data索引上写一个单独的搜索,满足以下要求:

    • title 字段包含memy
    • 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
                }
              }
            }
          ]
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    分析

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

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

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

    推荐阅读:

  • 相关阅读:
    SpringMVC04之JSON和全局异常处理
    How To Install and Configure VNC Server on Ubuntu 20.04
    21、Flink 大状态调优
    计算机网络(谢希仁)第八版课后题答案(第三章)
    回文串算法题解
    【云原生之kubernetes实战】在k8s环境下部署Koodo Reader电子书阅读器
    要怎么才能有效降低论文的查重率呢?
    JS清除字符串中的空格
    [RoarCTF 2019]Simple Upload
    win7打开文件夹总弹出新窗口怎么办
  • 原文地址:https://blog.csdn.net/wlei0618/article/details/127577614