es dsl多条件组合查询(转)
【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 查询已经从 |
通过将 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 中查看
将 |
通过混合布尔查询,我们可以在我们的查询请求中灵活地编写 scoring 和 filtering 查询逻辑。
constant_score 查询
尽管没有 bool
查询使用这么频繁,constant_score
查询也是你工具箱里有用的查询工具。它将一个不变的常量评分应用于所有匹配的文档。它被经常用于你只需要执行一个 filter 而没有其它查询(例如,评分查询)的情况下。
可以使用它来取代只有 filter 语句的 bool
查询。在性能上是完全相同的,但对于提高查询简洁性和清晰度有很大帮助。
{"constant_score": {"filter": {"term": { "category": "ebooks" } }} }
拷贝为 cURL在 Sense 中查看
|
es dsl多条件组合查询(转)相关推荐
- ElasticSearch实现高亮、范围查询和多条件组合查询(java和kibana)
ElasticSearch客户端配置参考之前的博客 1.高亮 高亮的本质其实是将搜索结果中需要高亮的字段进行替换 public List<Map<String,Object>> ...
- 多条件组合查询+分页
比较麻烦,把他记录下来. 前台UI: 实现的类代码: 程序代码 /// <summary> /// 多条件组合查询 /// </summary> ...
- 树控件,多条件组合查询与混合数据源
//实现多条件查询 //...连接数据库的代码 SqlDataAdapter sda = new SqlDataAdapter(sql,con); DataTable dt = new DataTab ...
- php js脚本查询php,php结合js实现多条件组合查询
本文实例为大家分享了php结合js实现多条件组合查询的具体代码,供大家参考,具体内容如下 一.效果图 二.前端代码 Jquery分类 .templinkactive { padding:5px; te ...
- hibernate 多条件组合查询之sql拼接
hibernate 多条件组合查询之sql拼接 [java] view plaincopyprint? public static void main(String[] args) { Session ...
- 条件查询_多条件组合查询---测试用例设计
一.假设查询因子:A,B,C,D,E(下拉框+复选框) 1.单独查询:A:B:C:D:E - 确保单独查询的正确性,这也是最基本的. 2.两个组合查询:AB:AC:AD:AE:BC:BD:BE:CD: ...
- solr的多条件组合查询和solr的范围查询【转】
solr的多条件组合查询和solr的范围查询 版权声明:本文为博主原创文章,供大家参考,但不要抄袭哦! 存在问题:为了减轻数据库的访问压力,往往我们将必要的数据存储到solr中,并给部分字段建立索引, ...
- SQL如何构建多条件组合查询,而且不降低效率
我们知道,在一般的信息系统中,特别是主要信息表,如客户基本信息,工单受理主界面,用户会用到多条件组合查询. 我看过一些系统,有的人是采用将一个表的栏位给用户选择,然后用户可以针对某一栏位来下条件,但是 ...
- 亿级数据多条件组合查询——秒级响应解决方案
1 概述 组合查询为多条件组合查询,在很多场景下都有使用.购物网站中通过勾选类别.价格.销售量范围等属性来对所有的商品进行筛选,筛选出满足客户需要的商品,这是一种典型的组合查询.在小数据量的情况下,后 ...
最新文章
- linux进程间通信:POSIX 消息队列 ----异步通信
- 30万字,“保姆级”可视化视觉设计优质学习攻略推荐
- ACM-ICPC 2018 南京赛区网络预赛
- hdu1316 大数
- 11 Python Pandas tricks that make your work more efficient
- dns服务器在电脑上有什么作用,DNS服务器是什么 DNS服务器的作用有哪些【详解】...
- bInitiallyDisabled实现原理
- 一个关于fixed抖动的小bug
- 金蝶k3财务接口_金蝶云为企业成长而生,让工作更高效!
- Python Numpy中transpose()函数的使用
- 第三季-第23课-Linux网络编程模型
- layui文档通读笔记
- Hadoop安装教程详解
- 2021五一杯数学建模B题 消防救援问题
- BZOJ2794 [Poi2012]Cloakroom [离线][DP]
- 前端知识-vue-3、组件化开发
- DC-DC直流隔离升压高压输出电源模块12v24v48v转50V110V200V250V350V400V500V600V800V1000V微功率
- 每日新闻丨​滴滴发布AI技术与解决方案开放平台;中关村发布超300亿创新母基金...
- Python 常用基础模块(二):os模块
- 公羊优链蜘蛛池【高权重】
热门文章
- Codeforces Round #732 (Div. 1Div. 2)
- CF1497D Genius
- 牛客题霸 [分糖果问题] C++题解/答案
- 牛客题霸 [用两个栈实现队列] C++题解/答案
- [2020.11.27NOIP模拟赛]拼图王【dp】
- jzoj2940-生成输入数据【最小生成树,并查集】
- 【DP】集合问题(2015特长生 T4/luogu 1466)
- 如何让面试官认可你的简历
- SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载
- art-template入门(八)之选项