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:小于等于,相当于关系型数据库中的<=
  • 相关阅读:
    ES6的Iterator,jquery Fn
    html4,xhtml,html5发展历史
    浏览器Range,Selection等选中文本对象
    高效的插入子节点DocumentFragment
    Vue 性能优化track-by
    JS中先有Object还是先有Function?
    Unicode 与(UTF-8,UTF-16,UTF-32,UCS-2)
    FormData、Blob、File、ArrayBuffer数据类型
    jQuery 2.0.3 源码分析 事件绑定
    记录:springmvc + mybatis + maven 搭建配置流程
  • 原文地址:https://www.cnblogs.com/s686zhou/p/12253134.html
Copyright © 2011-2022 走看看