Elasticsearch使用篇 - 组合查询

本文详细介绍了Elasticsearch的组合查询方式,包括Bool Query的must、should、must_not、filter选项,以及Boosting Query、Constant_Score Query、Dis_Max Query和Function_Score Query的使用方法,帮助用户在多条件查询时进行更精确的控制和评分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bool Query - 布尔组合查询

把其它查询布尔组合在一起。

使用 must、should、must_not、filter 选项表示其它查询之间的布尔关系。每个选项都可以出现任意次。

从结构上,布尔组合查询支持水平嵌套(各平级从句之间是and逻辑关系)、垂直嵌套。

  • must:查询从句必须用于匹配文档,相当于逻辑运算的 and。查询从句参与评分。must 从句的查询条件必须全部满足。

  • filter:查询从句必须用于匹配文档,相当于逻辑运算的 and。查询从句不参与评分。filter 从句的查询条件必须全部满足。

  • should:查询从句可以用于匹配文档,也可以不匹配,相当于逻辑运算的 or。查询从句参与评分。should 从句的查询条件满足的数量由 minimum_should_match 参数控制。

  • must_not:查询从句不能用来匹配文档。查询语句不参与评分。must_not 从句的查询条件必须全部不满足。

  • minimum_should_match:需要至少匹配指定数量个 should 从句。如果布尔组合查询只包含一个 should 从句,也就是说没有 must、filter、must_not 从句,那么该参数默认为 1。否则该参数默认为 0。

    • 正整数值:比如 3。表示至少需要匹配 3 个 should 从句。

    • 负整数值:比如 -2。表示至少需要匹配 should 从句的总数量 - 2 个 should 从句。

    • 正比例值:比如 75%。表示至少需要匹配 (should 从句的总数量 * 75%,再向下取整) 个 should 从句。

    • 负比例值:比如 -25%。表示至少需要匹配 should 从句的总数量 - (should 从句的总数量 * 25%,再向下取整)个 should 从句。

    • 组合值:比如 3<90%。表示如果 should 从句的数量为 1-3 之间,需要全部匹配;如果 should 从句的数量 > 3,需要匹配 90% 个 should 从句。

    • 多个组合值:比如 2<-25% 9<-3。表示如果 should 从句的数量为 1-2 之间,需要完全匹配;如果 should 从句的数量为 3-9 之间,需要匹配 -25% 个 should 从句;如果 should 从句数量 > 9,需要匹配 -3 个 should 从句。

e.g. (must、filter 从句例子)查询"OriginWeather"是"Sunny"并且"DestWeather"是"Rain"的文档

GET kibana_sample_data_flights/_search
{
 "track_total_hits": true,
 "query": {
   "bool": {
     "must": [
       {
         "match": {
           "OriginWeather": "Sunny"
         }
       },
       {
         "match": {
           "DestWeather": "Rain"
         }
       }
     ]
   }
 }
}

GET kibana_sample_data_flights/_search
{
  "track_total_hits": true,
  "query": {
    "bool": {
      "filter": [
        {
          "match": {
            "OriginWeather": "Sunny"
          }
        },
        {
          "match": {
            "DestWeather": "Rain"
          }
        }
      ]
    }
  }
}

filter从句查询得到的 max_score 以及每个匹配文档的 _score 都是0.0。

e.g. (<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值