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:小于等于,相当于关系型数据库中的<=
原文地址:https://www.cnblogs.com/s686zhou/p/12253134.html