ElasticSearch minimum_should_match 参数详解

这篇具有很好参考价值的文章主要介绍了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或大于子句数。)文章来源地址https://www.toymoban.com/news/detail-826733.html

到了这里,关于ElasticSearch minimum_should_match 参数详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch中的should 用法

    有一个场景需要实现 es_table中 isMember = 1 和 isMember !=1 其中isMember!=1有两种可能: isMember = 0 或者 isMember不存在  这种情况需要用到should,同时 跟其他条件 例如注册年在2023 是并列的关系 脚本需要用 should包含 两个条件 isMember = 0 或者 isMember不存在   GET es_table/_count {  

    2024年02月05日
    浏览(38)
  • Elasticsearch中should失效的问题

    在Elasticsearch中,当我们将must和should同级使用的时候,我们就会发现should失效了。 首先,当我们直接使用should的时候,参数minimum_should_match默认为1,此时我们使用should是可以正常返回结果的。 但是当我们将must和should同级使用的时候,此时minimum_should_match参数变为了0,也就是

    2024年02月12日
    浏览(34)
  • ElasticSearch 中 should 设定优先级

    在 Elasticsearch 中,查询时可以使用 should、must 和 must_not 来组合多个查询条件。这些定义了查询条件之间的关系,并决定了查询结果的匹配程度。 must 表示必须匹配的条件,满足 must 条件的文档才会被返回。 should 表示可选匹配的条件,至少满足一个 should 条件的

    2024年02月02日
    浏览(34)
  • Elasticsearch同时使用should和must

    must和should组合查询,should失效。 使用must嵌套查询,将should组成的bool查询包含在其中一个must查询中。

    2024年02月13日
    浏览(36)
  • [Elasticsearch]高亮使用方式及参数详解

    使用 Elasticsearch 的高亮功能,你可以在返回的搜索结果中为特定字段中的匹配词条添加 HTML 标签。你可以选择要高亮的字段,以及用于高亮的前缀和后缀标签。 比如当你的检索词为:刑法,当你使用默认高亮时高亮会为你返回em刑法/em 参数  含义 fields 指定高亮字段,每个字段

    2024年02月07日
    浏览(31)
  • Elasticsearch 中 bool组合查询(must 和 should 组合)

    需求 查询考试成绩是 60分 或 90分 的 女生 。 所以查询条件应该这么写 sex == \\\'女\\\' ( score == 60 || score ==90 );  先看下bool的语法 在ES中的实现 方式一: 在bool查询的must 中再嵌套一层bool来做should过滤。 方式二: 使用 minimum_should_match 选项 ,至少匹配一项should子句。 GET stu/_search

    2023年04月09日
    浏览(36)
  • 【干货精品分享】Elasticsearch 6.7 Should 子语句的失效

    在ES 使用多条件 查询,并且是多个条件只需要满足部分条件的时候,我们通常会使用到ES的should查询 没有should的查询情况如下: 执行包含should的语句查询结果: 这很好理解,should中的子语句,只有1个满足条件 都可以与must 进行 查询 问题:当我把should 中的条件改成只有一个

    2024年04月27日
    浏览(31)
  • 【Elasticsearch配置秘籍】详解config/elasticsearch.yml,解锁关键参数与实战应用

    Elasticsearch的强大性能与灵活性,很大程度上得益于其细致入微的配置选项。作为核心配置文件, config/elasticsearch.yml 扮演着至关重要的角色。本文将深度剖析该文件中的重要参数,结合实例说明其作用与应用场景,助您定制最适合业务需求的Elasticsearch集群。 一、基础配置项

    2024年04月11日
    浏览(36)
  • 【Python】np.maximum()和np.minimum()函数详解和示例

    本文通过函数原理和运行示例,对np.maximum()和np.minimum()函数进行详解,以帮助大家理解和使用。 更多Numpy函数详解和示例,可参考 【Python】Numpy库近50个常用函数详解和示例,可作为工具手册使用 np.maximum() 是 NumPy 库中的一个函数,用于比较两个或更多个数组元素,并返回每

    2024年01月24日
    浏览(41)
  • elasticsearch term & match 查询

    运行结果: 查询结果: match_all 的值为空,表示没有查询条件,那就是查询全部。就像 select * from table_name 一样。 查询结果: match 查询时散列映射,包含了我们希望搜索的字段和字符串,即只要文档中有我们希望的那个,但也会带来一些问题。 es 会将文档中的内容进

    2023年04月19日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包