首页 > 其他分享 >ES 布尔查询中 minimum_should_match 参数使用避坑

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

时间:2024-11-08 16:08:41浏览次数:4  
标签:避坑 查询 phone 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。

# ( 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
    }
  }
}
 

 

<iframe style="display: none !important"></iframe>

标签:避坑,查询,phone,minimum,子句,should,match
From: https://www.cnblogs.com/ExMan/p/18535306

相关文章

  • c++ Kruskal 最小生成树 (MST) 算法(Kruskal’s Minimum Spanning Tree (MST) Algorith
            对于加权、连通、无向图,最小生成树(MST)或最小权重生成树是权重小于或等于其他所有生成树权重的生成树。Kruskal算法简介:        在这里,我们将讨论Kruskal算法来查找给定加权图的MST。         在Kruskal算法中,按升序对给定图的所有......
  • JavaScript Kruskal 最小生成树 (MST) 算法(Kruskal’s Minimum Spanning Tree (MST) A
             对于加权、连通、无向图,最小生成树(MST)或最小权重生成树是权重小于或等于其他所有生成树权重的生成树。Kruskal算法简介:        在这里,我们将讨论Kruskal算法来查找给定加权图的MST。         在Kruskal算法中,按升序对给定图的所......
  • 优惠影票对接接口渠道如何避坑?
    对接优惠影票接口渠道时,为了避免陷入潜在的坑,你可以按照以下步骤和建议进行操作:1.合法性和合规性:确认供应商资质,优先选择具有相关票务经营资质的渠道,如大型在线票务平台或直接与影院院线合作的服务商,确保它们有合法的经营许可和授权。仔细审查合作合同,特别是关于数据使用和......
  • 由 Spring 静态注入引发的一个线上T0级别事故(真的以后得避坑)
    文章目录Spring静态注入实际案例Demo为什么这样写有时候RemoteEBRpcInvoker.getEbFormIdUtil是一个NULL???原因1:静态变量初始化顺序问题原因2:Spring生命周期与静态字段解决方案:方法1:移除静态字段(违背了我的初衷)方法2:使用@PostConstruct方法3:使用@Autowire......
  • 奇怪的错误:关于函数重载,头文件使用和新手避坑的小科普
    奇怪的错误:关于函数重载,头文件使用和新手避坑的小科普题目描述        个小球排成一排,现在有种不同颜色的油漆,给每个小球都涂色。如果相邻两个小球的颜色必须不同,那么共有多少种涂法?输入        一行,两个整数,。输出        一行,一个整数,为满......
  • 最小生成树(Minimum Spanning Tree,MST)初步
    定义连通图的最小生成树(MinimumSpanningTree,MST)为边权和最小的生成树。注意:只有连通图才有生成树,而对于非连通图,只存在生成森林。思路分为Kruskal与Prim两种算法。Kruskal从最小边权的边开始,按边权从小到大依次遍历。若当前边连接的两点不连通,加入此边。Prim每次选......
  • Vue快速嵌入百度地图,避坑提效指南
    Vue快速嵌入百度地图,避坑提效指南在Vue项目中引用百度地图并没有高德地图那么方便,但是项目要用,这里分享下找到的方法,方便使用到的时候能快速接入,避雷避坑!新建bmap.js文件exportdefault{init:function(){constAK="这里是你申请的百度AK";cons......
  • 对带有指针类型的切片进行循环时避坑
    func(sp*scrapePool)sync(targets[]*Target){//加锁 sp.mtx.Lock() defersp.mtx.Unlock() var(//target标记 uniqueTargets=map[uint64]struct{}{}//采集周期 interval=time.Duration(sp.config.ScrapeInterval)//采集超时时间 timeout......
  • 八要点助你精准挑选沙发,确保家装避坑!
    沙发可以称作是家里的第二张床,舒适是必不可少的要素。但是现在市场上的沙发种类繁多、鱼目混珠,挑选起来让人头大。那么,应该怎么选择一款优质的沙发呢?我们应该从以下八个方面进行选择。沙发材质:经济预算充足,可以选择真皮沙发,记住要选择头层皮,不要选二层皮。预算少的可以选择棉麻......
  • LeetCode 209 Minimum Size Subarray Sum 题目解析和python代码
    题目:Givenanarrayofpositiveintegersnumsandapositiveintegertarget,returntheminimallengthofasubarraywhosesumisgreaterthanorequaltotarget.Ifthereisnosuchsubarray,return0instead.Example1:Input:target=7,nums=[2,3,......