【README】在不评分的情况下, 推荐使用filter 过滤查询,因为不评分,查询性能优于评分性能;

转:https://www.elastic.co/guide/cn/elasticsearch/guide/current/combining-queries-together.html

下面截图是我认为最有价值的地方。

【2】全文如下:

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

你可以用 bool 查询来实现你的需求。这种查询将多查询组合在一起,成为用户自己想要的布尔查询。它接收以下参数:

must

文档 必须 匹配这些条件才能被包含进来。

must_not

文档 必须不 匹配这些条件才能被包含进来。

should

如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分。

filter

必须 匹配,但它以不评分(查询性能优于其他评分查询)、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。

由于这是我们看到的第一个包含多个查询的查询,所以有必要讨论一下相关性得分是如何组合的。每一个子查询都独自地计算文档的相关性得分。一旦他们的得分被计算出来, bool 查询就将这些得分进行合并并且返回一个代表整个布尔操作的得分。

下面的查询用于查找 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" }}}]}
}

拷贝为 cURL在 Sense 中查看

如果没有 must 语句,那么至少需要能够匹配其中的一条 should 语句。但,如果存在至少一条 must 语句,则对 should 语句的匹配没有要求。

增加带过滤器(filtering)的查询

如果我们不想因为文档的时间而影响得分,可以用 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" }} }}
}

拷贝为 cURL在 Sense 中查看

range 查询已经从 should 语句中移到 filter 语句

通过将 range 查询移到 filter 语句中,我们将它转成不评分的查询,将不再影响文档的相关性排名。由于它现在是一个不评分的查询,可以使用各种对 filter 查询有效的优化手段来提升性能。

所有查询都可以借鉴这种方式。将查询移到 bool 查询的 filter 语句中,这样它就自动的转成一个不评分的 filter 了。

如果你需要通过多个不同的标准来过滤你的文档,bool 查询本身也可以被用做不评分的查询。简单地将它放置到 filter 语句中并在内部构建布尔逻辑:

{"bool": {"must":     { "match": { "title": "how to make millions" }},"must_not": { "match": { "tag":   "spam" }},"should": [{ "match": { "tag": "starred" }}],"filter": {"bool": { "must": [{ "range": { "date": { "gte": "2014-01-01" }}},{ "range": { "price": { "lte": 29.99 }}}],"must_not": [{ "term": { "category": "ebooks" }}]}}}
}

拷贝为 cURL在 Sense 中查看

将 bool 查询包裹在 filter 语句中,我们可以在过滤标准中增加布尔逻辑

通过混合布尔查询,我们可以在我们的查询请求中灵活地编写 scoring 和 filtering 查询逻辑。

constant_score 查询

尽管没有 bool 查询使用这么频繁,constant_score 查询也是你工具箱里有用的查询工具。它将一个不变的常量评分应用于所有匹配的文档。它被经常用于你只需要执行一个 filter 而没有其它查询(例如,评分查询)的情况下。

可以使用它来取代只有 filter 语句的 bool 查询。在性能上是完全相同的,但对于提高查询简洁性和清晰度有很大帮助。

{"constant_score":   {"filter": {"term": { "category": "ebooks" } }}
}

拷贝为 cURL在 Sense 中查看

term 查询被放置在 constant_score 中,转成不评分的 filter。这种方式可以用来取代只有 filter 语句的 bool 查询。

es dsl多条件组合查询(转)相关推荐

  1. ElasticSearch实现高亮、范围查询和多条件组合查询(java和kibana)

    ElasticSearch客户端配置参考之前的博客 1.高亮 高亮的本质其实是将搜索结果中需要高亮的字段进行替换 public List<Map<String,Object>> ...

  2. 多条件组合查询+分页

    比较麻烦,把他记录下来. 前台UI: 实现的类代码: 程序代码 /// <summary>         /// 多条件组合查询         /// </summary> ...

  3. 树控件,多条件组合查询与混合数据源

    //实现多条件查询 //...连接数据库的代码 SqlDataAdapter sda = new SqlDataAdapter(sql,con); DataTable dt = new DataTab ...

  4. php js脚本查询php,php结合js实现多条件组合查询

    本文实例为大家分享了php结合js实现多条件组合查询的具体代码,供大家参考,具体内容如下 一.效果图 二.前端代码 Jquery分类 .templinkactive { padding:5px; te ...

  5. hibernate 多条件组合查询之sql拼接

    hibernate 多条件组合查询之sql拼接 [java] view plaincopyprint? public static void main(String[] args) { Session ...

  6. 条件查询_多条件组合查询---测试用例设计

    一.假设查询因子:A,B,C,D,E(下拉框+复选框) 1.单独查询:A:B:C:D:E - 确保单独查询的正确性,这也是最基本的. 2.两个组合查询:AB:AC:AD:AE:BC:BD:BE:CD: ...

  7. solr的多条件组合查询和solr的范围查询【转】

    solr的多条件组合查询和solr的范围查询 版权声明:本文为博主原创文章,供大家参考,但不要抄袭哦! 存在问题:为了减轻数据库的访问压力,往往我们将必要的数据存储到solr中,并给部分字段建立索引, ...

  8. SQL如何构建多条件组合查询,而且不降低效率

    我们知道,在一般的信息系统中,特别是主要信息表,如客户基本信息,工单受理主界面,用户会用到多条件组合查询. 我看过一些系统,有的人是采用将一个表的栏位给用户选择,然后用户可以针对某一栏位来下条件,但是 ...

  9. 亿级数据多条件组合查询——秒级响应解决方案

    1 概述 组合查询为多条件组合查询,在很多场景下都有使用.购物网站中通过勾选类别.价格.销售量范围等属性来对所有的商品进行筛选,筛选出满足客户需要的商品,这是一种典型的组合查询.在小数据量的情况下,后 ...

最新文章

  1. linux进程间通信:POSIX 消息队列 ----异步通信
  2. 30万字,“保姆级”可视化视觉设计优质学习攻略推荐
  3. ACM-ICPC 2018 南京赛区网络预赛
  4. hdu1316 大数
  5. 11 Python Pandas tricks that make your work more efficient
  6. dns服务器在电脑上有什么作用,DNS服务器是什么 DNS服务器的作用有哪些【详解】...
  7. bInitiallyDisabled实现原理
  8. 一个关于fixed抖动的小bug
  9. 金蝶k3财务接口_金蝶云为企业成长而生,让工作更高效!
  10. Python Numpy中transpose()函数的使用
  11. 第三季-第23课-Linux网络编程模型
  12. layui文档通读笔记
  13. Hadoop安装教程详解
  14. 2021五一杯数学建模B题 消防救援问题
  15. BZOJ2794 [Poi2012]Cloakroom [离线][DP]
  16. 前端知识-vue-3、组件化开发
  17. DC-DC直流隔离升压高压输出电源模块12v24v48v转50V110V200V250V350V400V500V600V800V1000V微功率
  18. 每日新闻丨​滴滴发布AI技术与解决方案开放平台;中关村发布超300亿创新母基金...
  19. Python 常用基础模块(二):os模块
  20. 公羊优链蜘蛛池【高权重】

热门文章

  1. Codeforces Round #732 (Div. 1Div. 2)
  2. CF1497D Genius
  3. 牛客题霸 [分糖果问题] C++题解/答案
  4. 牛客题霸 [用两个栈实现队列] C++题解/答案
  5. [2020.11.27NOIP模拟赛]拼图王【dp】
  6. jzoj2940-生成输入数据【最小生成树,并查集】
  7. 【DP】集合问题(2015特长生 T4/luogu 1466)
  8. 如何让面试官认可你的简历
  9. SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
  10. art-template入门(八)之选项