ES 布尔查询中 minimum_should_match 参数使用避坑

这篇具有很好参考价值的文章主要介绍了ES 布尔查询中 minimum_should_match 参数使用避坑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 Elasticsearch (ES) 中,布尔查询(Boolean Query)是一种查询类型,它允许你组合多个查询子句以控制搜索结果的匹配逻辑。minimum_should_match 是布尔查询中一个重要的参数,用于指定至少应该匹配的子句数量。

minimum_should_match 的值可以是一个具体的数字,也可以是一个百分比。它的具体含义取决于查询中的 should 子句的数量。

当 minimum_should_match 是一个整数时,它表示至少需要匹配的 should 子句数量。例如,如果将 minimum_should_match 设置为2,而查询中有4个 should 子句,那么至少需要匹配其中的2个子句才能满足查询条件。

当 minimum_should_match 是一个百分比时,它表示基于 should 子句的总数的相对比例。百分比的计算是根据有效的子句数量进行的,有效的子句是指那些非空、非布尔条件的子句。例如,如果设置 minimum_should_match 为"50%",而查询中有6个 should 子句,其中只有3个子句是非空的,那么至少需要匹配其中的2个子句(50% 的3)才能满足查询条件。

minimum_should_match 还可以使用特殊的语法来更精确地控制匹配条件。例如,可以使用百分比和固定值的组合,如"3<90%",表示至少需要匹配3个子句或总数的90%(以较大者为准)。

使用 minimum_should_match 参数可以灵活地控制布尔查询的匹配要求,使得查询结果更加符合预期。根据你的需求,可以根据子句的数量、百分比或它们的组合来调整该参数,以达到最佳的查询结果。

1、第一语义

minimum_should_match 参数用来指定 should 返回的文档必须匹配的条件的数量或百分比,如果 bool 查询包含至少一个 should 子句,而没有 must 或 filter 子句,则默认值为 1。

# 条件1: name中包含 "phone"
# 当未设置 minimum_should_match 参数时,多个条件的关系为 OR
# 条件2: type 等于 "phone"

GET goods_en/_search
{
  "_source": false,
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "type.keyword": "phone"
          }
        },
        {
          "match": {
            "name": "phone"
          }
        }
      ],
      "minimum_should_match": 2 // 设置为 2 则此时需要至少满足 2 个条件
    }
  }
}

2、第二语义

但是如果 bool 查询中同级子句中出现了 must 或者 filter 子句,则 minimum_should_match 的默认值将变为 0。文章来源地址https://www.toymoban.com/news/detail-701588.html

# ( must 或者 filter )和 should 组合
# 条件1: 价格小于20000
# 条件2: name中包含"phone"或者 type 等于"phone"
GET goods_en/_search
{
  "_source": false,
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "price": {
              "lte": "20000"
            }
          }
        }
      ],
      "should": [
        {
          "term": {
            "type.keyword": "phone"
          }
        },
        {
          "match": {
            "name": "phone"
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

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

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

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

相关文章

  • es笔记三之term,match,match_phrase 等查询方法介绍

    本文首发于公众号:Hunter后端 原文链接:es笔记三之term,match,match_phrase 等查询方法介绍 首先介绍一下在 es 里有两种存储字符串的字段类型,一个是 keyword,一个是 text。 keyword 在存储数据的时候是作为一个整体存储的,不会对其进行分词处理 text 存储数据的时候会对字符串

    2024年02月05日
    浏览(51)
  • ElasticSearch系列 - SpringBoot整合ES之全文搜索匹配查询 match

    官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/index.html 权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/structured-search.html 1. 数据准备 官方测试数据下载地址:https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip ,数据量很大,我们自己构造数据吧。 2. m

    2023年04月08日
    浏览(51)
  • ElasticSearch系列 - SpringBoot整合ES:短语匹配查询 match_phrase

    1. ElasticSearch match_phrase查询是什么?它与match查询有什么区别? match_phrase查询是一种用于匹配短语的查询方式,可以用于精确匹配多个单词组成的短语。它会将查询字符串分解成单词,然后按照顺序匹配文档中的单词,只有当文档中的单词顺序与查询字符串中的单词顺序完全

    2024年02月12日
    浏览(50)
  • ElasticSearch系列 - SpringBoot整合ES:多字段查询 multi_match

    1. 什么是 ElasticSearch 的 multi_match 查询? 有时用户需要在多个字段中查询,除了使用布尔查询封装多个match查询之外,可替代的方案是使用multi_match。可以在multi_match的query子句中组织数据匹配规则,并在fields子句中指定需要搜索的字段列表。 以下是一个示例multi-match查询

    2023年04月21日
    浏览(64)
  • ElasticSearch——布尔查询

    Elasticsearch · 语雀(完整笔记) 布尔查询是一个或多个查询子句的组合,每一个子句就是一个 子查询 。子查询的组合方式有: must:必须匹配每个子查询,类似“与” should:选择性匹配子查询,类似“或” must_not:必须不匹配, 不参与算分 ,类似“非” filter:必须匹配,

    2024年02月15日
    浏览(40)
  • java使用elasticsearchClient调用es7.17-生成连接、查询系统参数、索引相关操作

    java调用elasticsearch有几种不同的方式,考虑到以后维护方便,使用elasticSearchClient进行数据交互 首先要进行maven引入,后面两个是与json转化有关的,刚开始测试可以无需引入 1、ModelTestCase 此实体整合了与es系统有关的相关参数 2、Person 此实体主要为测试索引中的数据结构 1、生

    2024年02月15日
    浏览(46)
  • Elasticsearch(十二)搜索---搜索匹配功能③--布尔查询及filter查询原理

    本节主要学习ES匹配查询中的布尔查询以及布尔查询中比较特殊的filter查询及其原理。 复合搜索,顾名思义是一种在一个搜索语句中包含一种或多种搜索子句的搜索。 布尔查询是常用的复合查询,它把多个子查询组合成一个布尔表达式,这些子查询之间的逻辑关系是\\\"与\\\",即

    2024年02月04日
    浏览(49)
  • python argparse传入布尔参数不生效的解决方法

    在一个需要用到flag作为信号控制代码中一些代码片段是否运行的,比如\\\"--flag True\\\"或者\\\"--flag False\\\"。 但是古怪的是无法传入False,无论传入True还是False,程序里面都是True的参数,所以这个flag并没有生效,也就失去了意义。 参考代码: 执行上面的代码:python3 test.py --flag False

    2024年02月13日
    浏览(34)
  • 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日
    浏览(34)
  • elasticsearch[二]-DSL查询语法:全文检索、精准查询(term/range)、地理坐标查询(矩阵、范围)、复合查询(相关性算法)、布尔查询

    elasticsearch 的查询依然是基于 JSON 风格的 DSL 来实现的。 Elasticsearch 提供了基于 JSON 的 DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有 :查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询 :利用分词器对用户输入内容分词,然后去

    2024年01月18日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包