组合多查询

现实的查询需求从来都没有那么简单;它们需要在多个字段上查询多种多样的文本,并且根据一系列的标准来过滤。为了构建类似的高级查询,你需要一种能够将多查询组合成单一查询的查询方法。

你可以用 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)相关推荐

  1. ES 查询关键字(match, term, range,terms)、组合多查询(must, should, must_not,filter)、分页、排序sort、高亮highlight

    一.常用查询关键字 1. match 查询 match查询会将搜索词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到. { "match": { & ...

  2. Elasticsearch(es) 查询语句语法详解

    Elasticsearch 查询语句采用基于 RESTful 风格的接口封装成 JSON 格式的对象,称之为 Query DSL.Elasticsearch 查询分类大致分为全文查询.词项查询.复合查 ...

  3. 微服务项目之电商--19.ElasticSearch基本、高级查询和 过滤、结果过滤、 排序和聚合aggregations

    接上一篇 目录 3.查询 3.1.基本查询: 3.1.1 查询所有(match_all) 3.1.2 匹配查询(match) 3.1.3 多字段查询(multi_match) 3.1.4 词条匹配(t ...

  4. 跟乐乐学ES!(三)ElasticSearch 批量操作与高级查询

    上一篇文章:跟乐乐学ES!(二)ElasticSearch基础. 下一篇文章:跟乐乐学ES!(四) java中ElasticSearch客户端的使用. 批量操作 有些增删改查操作是可以进行批量操作的, ...

  5. ElasticSearch 全文搜索引擎的查询详解①(Ubuntu版 v6.6.2)

    ElasticSearch 全文搜索引擎的查询详解①(Ubuntu版 v6.6.2) 1. 前提 2. 轻量搜索 2.1 单条件查询 2.2 多条件查询 2.3 不指定属性查询(查询所有文档属性)-- ...

  6. Elasticsearch(二、高级查询+集群搭建)

    1内容概述 ElasticSearch 高级操作 ElasticSearch 集群管理 2 ElasticSearch高级操作 2.1 bulk批量操作-脚本 脚本: 测试用的5号文档 POST /p ...

  7. Elasticsearch对地理数据查询(一)

    翻译版本:https://es.xiaoleilu.com/310_Geopoints/00_Intro.html 官方原文:https://www.elastic.co/guide/en/elast ...

  8. 【Elasticsearch】ElasticSearch里面的偏好查询

    1.概述 转载:ElasticSearch里面的偏好查询 在es查询的时候我们可以控制Preference,来完成特定shard或节点上的数据查询,默认情况下查询是随机的. 假如现在我们有一份索引5个 ...

  9. elasticsearch的查询器query与过滤器filter的区别

    很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单-  当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...

最新文章

  1. java验证注册页面_Java使用正则表达式对注册页面进行验证功能实现
  2. JVM启动参数解析(转)
  3. 如何制作自己的gem
  4. sql中的case when
  5. 实施Exchange 2013中的 MailTip
  6. jboss8日志级别设置_罐中研讨会:设置JBoss BPM Suite全日研讨会
  7. go grpc 深入笔记
  8. linux6添加chkconfig管理,10、14 Linux系统服务管理工具-chkconfig
  9. 手把手教你用Python搭建一个AI智能问答系统
  10. 修改一个CGRect的值
  11. c++ eos智能合约开发_hyperledger fabric 开发第一个智能合约
  12. 老李推荐:第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数...
  13. SciPy安装超时(timed out)
  14. 北京国际车展直击:上汽集团近百款新车彰显雄厚实力
  15. 时间序列——季节系数法
  16. 在IDEA里jsp项目图片显示不出来(图文解答)
  17. 职高计算机专业的课后总结,职业高中教师教学工作总结
  18. ios 视频处理详解一(视频导出)
  19. Photoshop 无法安装Tych Panel,提示:could not create folder Run Photoshop as administrator or create the ...
  20. python 生成word表格(合并单元格)

热门文章

  1. 个人中心html更换头像,html5 头像上传更换插件
  2. 使用css3和h5实现幻灯片,点击切换图片效果
  3. 何新生的英语史(三)—有干劲、入门阶段
  4. 北斗组网大功告成!你的手机真的能连上北斗吗
  5. [note] 微电子学概论(二) PN结 MOS和MOSFET
  6. 产品经理的总结(一)
  7. 你以为的SPSS只是简单的数据分析软件吗?
  8. Windows系统提示应用程序无法正常启动(0xc0000142)解决方法
  9. 【读书笔记】理工科思维解读《万万没想到》
  10. 铁路及工程相关专业术语自动查询