Elasticsearch布尔查询及其组合查询

本文介绍了Elasticsearch的布尔查询,包括must、should、must_not和filter四种类型,详细解析了它们在DSL中的使用,并通过示例与SQL语句进行对比。还探讨了布尔查询的组合方式,如嵌套查询,帮助理解Elasticsearch查询机制。
摘要由CSDN通过智能技术生成

布尔查询

Elasticsearch支持类似于在SQL中使用ANDOR以及NOT的运算(在MySQL中仅支持部分语句使用NOT运算符,例如IN运算等,在这里我们也可以理解为使用相反的运算符),称之为布尔查询(Boolean Query)。Elasticsearch支持的布尔逻辑类型包括有以下几种:

  • must:文档必须符合其中所有的查询条件,包含多个条件时类似于SQL中的AND
  • should:文档必须符合其中任意一个及以上查询条件(可由minimum_should_match指定需要满足的条件数量),包含多个条件时类似于SQL中的OR
  • must_not:文档必须不符合其中所有的查询条件,类似于SQL中的NOT,且返回的结果的分值都为0
  • filter:效果与使用must相同,但不影响查询结果的分值(score)。

在使用布尔查询时,需要将查询的条件写在bool查询语句中,且同个bool查询语句可以有多个不同的条件。

{
   
  "query": {
   
    "bool": {
   
      "must": {
   
        "term": {
   
          "age": 20
        }
      },
      "must_not": {
   
        "term": {
   
          "gender": "male"
        }
      }
    }
  }
}

例如该查询运行后,将返回age的值为20gender的值不为"male"的文档。

下面,我们将介绍上述各个类型查询语句在DSL(Domain Specific Language,即Elasticsearch使用的结构化查询语言)的用法。

must查询

当使用must查询时,文档必须符合其中包括的所有查询条件。当must查询只包括一个查询条件时,可在DSL中使用JSON对象的形式表示,例如以下示例:

{
   
  "query": {
   
    "bool": {
   
      "must": {
   
        "term": {
   
          "age": 20
        }
      }
    }
  }
}

该查询等同于下面对应的SQL语句:

SELECT * FROM xxx WHERE age = 20;

使用must时可以同时指定多个查询条件,在DSL中它以数组的形式表示,效果类似于SQL中的AND运算。例如下面的例子:

{
   
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值