ElasticSearch(六)组合多查询(must, should, must_not, bool, filter)
组合多查询
现实的查询需求从来都没有那么简单;它们需要在多个字段上查询多种多样的文本,并且根据一系列的标准来过滤。为了构建类似的高级查询,你需要一种能够将多查询组合成单一查询的查询方法。
你可以用 bool
查询来实现你的需求。这种查询将多查询组合在一起,成为用户自己想要的布尔查询(Bool)。
它接收以下参数:
1.must
文档 必须 匹配这些条件才能被包含进来。
相当于sql中的 and
2.must_not
文档 必须不 匹配这些条件才能被包含进来。
相当于sql中的 not
3.should
如果满足这些语句中的任意语句,将增加 _score
,否则,无任何影响。它们主要用于修正每个文档的相关性得分。
相当于sql中的or
4.filter
必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。
每一个子查询都独自地计算文档的相关性得分。一旦他们的得分被计算出来, bool
查询就将这些得分进行合并并且返回一个代表整个布尔操作的得分score。\
示例:下面的查询用于查找 title
字段匹配 how to make millions
并且不被标识为 spam
的文档。那些被标识为 starred
或在2014之后的文档,将比另外那些文档拥有更高的排名。如果 两者 都满足,那么它排名将更高:
{"bool": {"must": { "match": { "title": "how to make millions" }},"must_not": { "match": { "tag": "spam" }},"should": [{ "match": { "tag": "starred" }},{ "range": { "date": { "gte": "2014-01-01" }}}]}
}
Java代码
BoolQueryBuilder defaultQueryBuilder = QueryBuilders.boolQuery();defaultQueryBuilder.must(QueryBuilders.matchQuery("title", "how to make millions")).mustNot(QueryBuilders.matchQuery("tag", "span")).should(QueryBuilders.matchQuery("tag", "starred")).should(QueryBuilders.rangeQuery("date").gte("2014-01-01"));
filter用法改造:
{"bool": {"must": { "match": { "title": "how to make millions" }},"must_not": { "match": { "tag": "spam" }},"should": [{ "match": { "tag": "starred" }}],"filter": {"range": { "date": { "gte": "2014-01-01" }} }}
}
注意filter中的条件不参与评分score排序
ElasticSearch(六)组合多查询(must, should, must_not, bool, filter)相关推荐
- ES 查询关键字(match, term, range,terms)、组合多查询(must, should, must_not,filter)、分页、排序sort、高亮highlight
一.常用查询关键字 1. match 查询 match查询会将搜索词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到. { "match": { & ...
- Elasticsearch(es) 查询语句语法详解
Elasticsearch 查询语句采用基于 RESTful 风格的接口封装成 JSON 格式的对象,称之为 Query DSL.Elasticsearch 查询分类大致分为全文查询.词项查询.复合查 ...
- 微服务项目之电商--19.ElasticSearch基本、高级查询和 过滤、结果过滤、 排序和聚合aggregations
接上一篇 目录 3.查询 3.1.基本查询: 3.1.1 查询所有(match_all) 3.1.2 匹配查询(match) 3.1.3 多字段查询(multi_match) 3.1.4 词条匹配(t ...
- 跟乐乐学ES!(三)ElasticSearch 批量操作与高级查询
上一篇文章:跟乐乐学ES!(二)ElasticSearch基础. 下一篇文章:跟乐乐学ES!(四) java中ElasticSearch客户端的使用. 批量操作 有些增删改查操作是可以进行批量操作的, ...
- ElasticSearch 全文搜索引擎的查询详解①(Ubuntu版 v6.6.2)
ElasticSearch 全文搜索引擎的查询详解①(Ubuntu版 v6.6.2) 1. 前提 2. 轻量搜索 2.1 单条件查询 2.2 多条件查询 2.3 不指定属性查询(查询所有文档属性)-- ...
- Elasticsearch(二、高级查询+集群搭建)
1内容概述 ElasticSearch 高级操作 ElasticSearch 集群管理 2 ElasticSearch高级操作 2.1 bulk批量操作-脚本 脚本: 测试用的5号文档 POST /p ...
- Elasticsearch对地理数据查询(一)
翻译版本:https://es.xiaoleilu.com/310_Geopoints/00_Intro.html 官方原文:https://www.elastic.co/guide/en/elast ...
- 【Elasticsearch】ElasticSearch里面的偏好查询
1.概述 转载:ElasticSearch里面的偏好查询 在es查询的时候我们可以控制Preference,来完成特定shard或节点上的数据查询,默认情况下查询是随机的. 假如现在我们有一份索引5个 ...
- elasticsearch的查询器query与过滤器filter的区别
很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单- 当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...
最新文章
- java验证注册页面_Java使用正则表达式对注册页面进行验证功能实现
- JVM启动参数解析(转)
- 如何制作自己的gem
- sql中的case when
- 实施Exchange 2013中的 MailTip
- jboss8日志级别设置_罐中研讨会:设置JBoss BPM Suite全日研讨会
- go grpc 深入笔记
- linux6添加chkconfig管理,10、14 Linux系统服务管理工具-chkconfig
- 手把手教你用Python搭建一个AI智能问答系统
- 修改一个CGRect的值
- c++ eos智能合约开发_hyperledger fabric 开发第一个智能合约
- 老李推荐:第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数...
- SciPy安装超时(timed out)
- 北京国际车展直击:上汽集团近百款新车彰显雄厚实力
- 时间序列——季节系数法
- 在IDEA里jsp项目图片显示不出来(图文解答)
- 职高计算机专业的课后总结,职业高中教师教学工作总结
- ios 视频处理详解一(视频导出)
- Photoshop 无法安装Tych Panel,提示:could not create folder Run Photoshop as administrator or create the ...
- python 生成word表格(合并单元格)