zoukankan      html  css  js  c++  java
  • 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:小于等于,相当于关系型数据库中的<=
  • 相关阅读:
    单例模式(上)单例常见的实现方式
    Netty(六)揭开 BootStrap 的神秘面纱
    Netty(五)Netty 高性能之道
    Netty(四)基于Netty 的简易版RPC
    Netty(三)基于Bio和Netty 的简易版Tomcat
    Netty(二)Netty 与 NIO 之前世今生
    java学习笔记
    Java使用笔记之对象比较
    React学习之受控和非受控组件
    SpringBoot学习之常用注解
  • 原文地址:https://www.cnblogs.com/s686zhou/p/12253134.html
Copyright © 2011-2022 走看看