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

时间: 2024-10-31 04:30:33

elasticsearch之布尔查询的相关文章

Elasticsearch (DSL 布尔查询 过滤器 排序 高亮显示

es 可以组合查询 must:查询必须匹配搜素条件 比如数据库中的and should :查询 至少 满足条件 比如数据库中的or must_not: 不匹配查询条件,一个都不要满足 must must_not should 至少要包含一个条件 复合查询 原文地址:https://www.cnblogs.com/loujiang/p/12701596.html

Elasticsearch布尔查询——bool

布尔查询允许我们利用布尔逻辑将较小的查询组合成较大的查询. 1.查询返回包含"mill"和"lane"的所有的账户 curl -XPOST 'localhost:9200/bank/_search?pretty' -d ' { "query": { "bool": { "must": [ { "match": { "address": "mill"

Elasticsearch 常用基本查询

安装启动很简单,参考官网步骤:https://www.elastic.co/downloads/elasticsearch 为了介绍Elasticsearch中的不同查询类型,我们将对带有下列字段的文档进行搜索:title(标题),authors(作者),summary(摘要),release date(发布时间)以及number of reviews(评论数量),首先,让我们创建一个新的索引,并通过bulk API查询文档: 为了展示Elasticsearch中不同查询的用法,首先在Elast

ElasticSearch结构化查询

ElasticSearch结构化查询 Elasticsearch 提供了丰富的查询过滤语句,而有一些是我们较常用到的. 现在我们快速的介绍一下 这些最常用到的查询过滤语句. term 过滤 term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed的字符串(未经分析的文本数据类型): { "term": { "age": 26 }} { "term": { "date": "2014-09-0

Elasticsearch(7) --- 复合查询

Elasticsearch(7) ---复合查询 复合查询有:bool query(布尔查询).boosting query(提高查询).constant_score(固定分数查询).dis_max(最佳匹配查询).function_score(函数查询). 一.bool query(布尔查询) 1.概念 定义 可以理解成通过布尔逻辑将较小的查询组合成较大的查询. Bool查询语法有以下特点 子查询可以任意顺序出现 可以嵌套多个查询,包括bool查询 如果bool查询中没有must条件,shou

第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的查询

第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)的查询 elasticsearch(搜索引擎)的查询 elasticsearch是功能非常强大的搜索引擎,使用它的目的就是为了快速的查询到需要的数据 查询分类: 基本查询:使用elasticsearch内置的查询条件进行查询 组合查询:把多个查询条件组合在一起进行复合查询 过滤:查询同时,通过filter条件在不影响打分的情况下筛选数据

利用kibana插件对Elasticsearch进行bool查询

#bool查询#老版本的filtered查询已经被bool代替#用 bool包括 must should must_not filter来完成 ,格式如下:#bool:{#  "filter":[],#  "must":[],#  "should":[],#  "must_not"[],#}#must 数组内的所有查询都必须满足#should 数组内只需要满足一个#must_not 一个都不能满足 #建立测试数据 POST l

Elastic Search之布尔查询

前言 布尔查询是最常见的组合查询,根据子查询的规则,只有当文档满足所有子查询条件时,Elastic Search 引擎才会将结果返回.布尔查询支持的子查询条件共4种: must(and) should(or) must_not(not) filter 准备数据 PUT zhifou/doc/1 { "name":"顾老二", "age":30, "from":"gu", "desc":&

ElasticSearch 常用的查询过滤语句

query 和  filter 的区别请看: http://www.cnblogs.com/ghj1976/p/5292740.html    Filter DSL   term 过滤 term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型): { "term": { "age":    26           }} { "term": { "date":   &