elasticsearch之布尔查询

Posted s686zhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch之布尔查询相关的知识,希望对你有一定的参考价值。

前言

布尔查询是最常用的组合查询,根据子查询的规则,只有文档满足所有子查询条件时,elasticsearch 引擎才将结果返回。布尔查询支持的子查询条件共4种

 must  (and)

should (or)

must_not (not)

filter

 

1.must

需求: 查询 from 为 gu  并且 age  为 30  的数据

GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "age": 30
          }
        }
      ]
    }
  }
}

 

2.should

需求: 查询只要时 from 为 gu   或者 tags 为 闭月的数据

GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "tags": "闭月"
          }
        }
      ]
    }
  }
}

 

 

3.must_not

需求:查询 from 既不是 gu  并且 tags 也不是 可爱  还有 age不是18的数据

GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "tags": "可爱"
          }
        },
        {
          "match": {
            "age": 18
          }
        }
      ]
    }
  }
}

 

 

4.filter

需求: 查询 from 为 gu, age 大于 25 的数据 

 

GET zhifou/doc/_search
{
  "query": {
    "bool": {
      "must": [    
        {
          "match": {
            "from": "gu"
          }
        }
      ],
      "filter": {          #此时的 filter 不在 must 列表中
        "range": {
          "age": {
            "gt": 25        
          }
        }
      }
    }
  }
}

 

 

注意:  这里 bool 下面为什么不用 should 而用  must

首先 在查询过程中  优先经过 filter 过滤,

然后  过滤出来的结果 再去匹配  must  或 should 中的     此时 should 是或 因此 会放行所有的结果

 

 

 

小结:

  • must:与关系,相当于关系型数据库中的and
  • should:或关系,相当于关系型数据库中的or
  • must_not:非关系,相当于关系型数据库中的not
  • filter:过滤条件。
  • range:条件筛选范围。
  • gt:大于,相当于关系型数据库中的>
  • gte:大于等于,相当于关系型数据库中的>=
  • lt:小于,相当于关系型数据库中的<
  • lte:小于等于,相当于关系型数据库中的<=

 

以上是关于elasticsearch之布尔查询的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Search之布尔查询

ElasticStack学习:深入ElasticSearch搜索之QueryFiltering多/单字符串的多字段查询

Elasticsearch系列(13)Query之全文查询

初识ElasticSearch -文档查询之bool查询

初识ElasticSearch -文档查询之bool查询

小白学习-ElasticSearch教程 -文档查询之bool查询