暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ES组合查询中 minimum_should_match 认知误区

Elastic之家 2022-10-28
621

背景

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

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

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

1、minimum_should_match默认值是不固定的

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深层次解读[1]

      快来和小伙伴们一起学习更多干货


      分享

      收藏

      点赞


      文章转载自Elastic之家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论