【Elasticsearch】-Boolean查询

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: bool查询采用了“匹配越多越好”的方法,因此来自每个匹配的must或should子句的分数将添加在一起,以提供每个文档的最终_分数。

bool查询采用了“匹配越多越好”的方法,因此来自每个匹配的must或should子句的分数将添加在一起,以提供每个文档的最终_分数

bool查询主要包括以下几种类型

must:查询的结果必须出现在匹配文档中,并且会计算得分

filter:查询的结果必须出现在匹配文档中,但是会忽略计算得分

should:查询的结果应该出现在匹配文档中,会计算相关性得分

must_not:查询的结果不应该出现在匹配的文档中,评分会被忽略

range:条件范围查询

gt:大于 相当于数据库中的>

gte:大于等于 相当于数据库中的>=

lt:小于 相当于数据库中的<

lte:小于等于,相当于数据库中的<=

如果不需要计算得分,可以使用filter替代must,以提高检索效率的目的。

# must必须匹配,会进行相关性打分POST/nba/_search{
"query": {
"bool": {
"must": [
        {
"match": {
"title": "james"          }
        }
      ]
    }
  }
}
# filter必须匹配,不会进行相关性打分POST/nba/_search{
"query": {
"bool": {
"filter": [
        {
"match": {
"title": "james"          }
        }
      ]
    }
  }
}
# must_not必须不匹配postnba/_search{
"query": {
"bool": {
"must": [
        {
"match": {
"title": "james"          }
        }
      ],
"must_not": [
        {
"term": {
"teamConferenceEn": {
"value": "Eastern"            }
          }
        }
      ]
    }
  }
}
# should 应该,应该是11-20年,但是其他的也会查询出来postnba/_search{
"query": {
"bool": {
"must": [
        {
"match": {
"title": "james"          }
        }
      ],
"must_not": [
        {
"term": {
"teamConferenceEn": {
"value": "Eastern"            }
          }
        }
      ],
"should": [
        {
"range": {
"year": {
"gte": 2011,
"lte": 2020            }
          }
        }
      ]
    }
  }
}
# should 应该,应该是11-20年,配合minimum_should_match=1,则至少匹配should中的一个条件,应该变成必须一个条件成立postnba/_search{
"query": {
"bool": {
"must": [
        {
"match": {
"title": "james"          }
        }
      ],
"must_not": [
        {
"term": {
"teamConferenceEn": {
"value": "Eastern"            }
          }
        }
      ],
"should": [
        {
"range": {
"year": {
"gte": 2011,
"lte": 2020            }
          }
        }
      ],
"minimum_should_match": 1    }
  }
}
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
7天前
|
JSON 自然语言处理 算法
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
DSL查询文档、RestClient查询文档、全文检索查询、精准查询、复合查询、地理坐标查询、分页、排序、高亮、黑马旅游案例
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
|
1月前
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
21 1
|
2月前
|
存储 自然语言处理 关系型数据库
Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别
【7月更文挑战第3天】Elasticsearch 查询时 term、match、match_phrase、match_phrase_prefix 的区别
|
2月前
|
存储 数据库 索引
面试题ES问题之动态映射的定义如何解决
面试题ES问题之动态映射的定义如何解决
28 1
|
1月前
|
存储 自然语言处理 Java
ElasticSearch 实现分词全文检索 - 经纬度定位商家距离查询
ElasticSearch 实现分词全文检索 - 经纬度定位商家距离查询
12 0
|
1月前
|
自然语言处理 Java
ElasticSearch 实现分词全文检索 - 高亮查询
ElasticSearch 实现分词全文检索 - 高亮查询
45 0
|
1月前
|
缓存 自然语言处理 Java
ElasticSearch 实现分词全文检索 - filter查询
ElasticSearch 实现分词全文检索 - filter查询
28 0
|
1月前
|
自然语言处理 Java
ElasticSearch 实现分词全文检索 - 复合查询
ElasticSearch 实现分词全文检索 - 复合查询
39 0
|
1月前
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询
ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询
44 0
|
1月前
|
自然语言处理 Java
ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询
ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询
90 0