ES中的Query与Filter的区别
QElasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询。
Query DSL 与 Filter DSL
DSL查询语言中存在两种:查询DSL(query DSL)和过滤DSL(filter DSL)。
它们两个的区别如下图:
query DSL
在查询上下文中,查询会回答这个问题——“这个文档匹不匹配这个查询,它的相关度高么?”
如何验证匹配很好理解,如何计算相关度呢?ES中索引的数据都会存储一个_score分值,分值越高就代表越匹配。另外关于某个搜索的分值计算还是很复杂的,因此也需要一定的时间。
查询上下文 是在 使用query进行查询时的执行环境,比如使用search的时候。
一些query的场景:
- 与full text search的匹配度最高
- 包含run单词,如果包含这些单词:runs、running、jog、sprint,也被视为包含run单词
- 包含quick、brown、fox。这些词越接近,这份文档的相关性就越高
filter DSL
在过滤器上下文中,查询会回答这个问题——“这个文档匹不匹配?”
答案很简单,是或者不是。它不会去计算任何分值,也不会关心返回的排序问题,因此效率会高一点。
过滤上下文 是在使用filter参数时候的执行环境,比如在bool查询中使用Must_not或者filter
另外,经常使用过滤器,ES会自动的缓存过滤器的内容,这对于查询来说,会提高很多性能。
一些过滤的情况:
- 创建日期是否在2013-2014年间?
- status字段是否为published?
- lat_lon字段是否在某个坐标的10公里范围内?
参考: http://www.cnblogs.com/xing901022/p/4975931.html
下图的查询就是一个组合查询, 既有 filter 也有 query:
http://xiaorui.cc/2015/11/09/elasticsearch%E7%9A%84%E6%9F%A5%E8%AF%A2%E5%99%A8query%E4%B8%8E%E8%BF%87%E6%BB%A4%E5%99%A8filter%E7%9A%84%E5%8C%BA%E5%88%AB/
上面文章提供了一个测试例子。
- query语句查询结果,第一次查询用了300ms,第二次用了280ms.
- filter查询出来的结果,第一次查询时间是280ms,第二次130ms。
具体如何写 查询和 过滤并存的请看下面这篇文章:
查询与过滤条件的合并
http://es.xiaoleilu.com/054_Query_DSL/75_Queries_with_filters.html
比如说我们有这样一条查询语句,获取右键内容中带“business opportunity
” 的:
{
"match": {
"email": "business opportunity"
}
}
然后我们想要让这条语句加入 term 过滤,只在收信箱中匹配邮件:
{
"term": {
"folder": "inbox"
}
}
search API中只能包含 query 语句,所以我们需要用 filtered 来同时包含 "query" 和 "filter" 子句:
{
"filtered": {
"query": { "match": { "email": "business opportunity" }},
"filter": { "term": { "folder": "inbox" }}
}
}
我们在外层再加入 query 的上下文关系:
GET /_search
{
"query": {
"filtered": {
"query": { "match": { "email": "business opportunity" }},
"filter": { "term": { "folder": "inbox" }}
}
}
}
ES中的Query与Filter的区别相关推荐
- java post和put的区别,ES 中的 POST 和 PUT 的区别
0.什么是Restful架构 比较难说清楚,这部分大雾状态,引ruanyf 理解RESTful架构 的几句总结吧: Fielding将他对互联网软件的架构原则,定名为REST,即Representat ...
- doc es 中type_ElasticSearch: Index 和 Type 的区别
原文: Index vs. Type By Adrien Grand 译者: fengchang 对于 ES 的新用户来说,有一个常见的问题:要存储一批新的数据时,应该在已有 index 里新建一个 ...
- es的query及filter
为什么80%的码农都做不了架构师?>>> ##query与filter的合并 Queries and filters merged 将filter的api列为deprecate ...
- Elasticsearch DSL中Query与Filter的不同
Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. 举个DSL例子 GET _search {"query": { & ...
- ES中term、terms、match的区别
ES中term.terms.match的区别 term query会去倒排索引中寻找确切的term,它并不知道分词器的存在,这种查询适合keyword.numeric.date等明确值的 term:查 ...
- Springmvc中的拦截器interceptor及与过滤器filter的区别
一.Springmvc中的拦截器概述及与过滤器filter的区别 1).Springmvc中的拦截器interceptor用于对控制器controller进行预处理和后处理的技术; 2).可以定义拦截 ...
- JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别
JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别 如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param–>lis ...
- es过滤指定数据 java_elasticsearch 结构化搜索_在案例中实战基于range filter来进行范围过滤...
课程大纲 1.为帖子数据增加浏览量的字段 POST /forum/article/_bulk { "update": { "_id": "1" ...
- elasticsearch的查询器query与过滤器filter的区别
很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单- 当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...
最新文章
- 【c语言】求最大公约数
- UA MATH567 高维统计II 随机向量3 常见的高维随机向量的分布
- ASA8.4policy-map接口和全局执行的优先级测试:
- 楼宇计算机网络是如何工作的,【干货】建筑楼宇智能化如何应用 4C 技术
- 如何拿到半数面试公司Offer——我的Python求职之路
- Linux运维问题解决(1)——Linux 定时任务 crontab 配置及示例
- CCProgressTimer进度条效果
- python语言入门t_Python基础学习
- qnap自带有mysql吗_关于威联通QNAP NAS应用—Container Station 容器套件
- 修改Maven本地仓库路径,IDEA修改maven位置
- JSONP原理及实现
- linux远程桌面rdesktop,Linux下通过rdesktop连接Windows远程桌面
- SpringBoot逻辑删除
- mac换硬盘重装系统记录
- 如何清理占用计算机内存,win7系统清理电脑内存的操作方法
- 第十四周 项目1 - 验证算法
- 10大主流压力/负载/性能测试工具推荐
- opencv与PIL互转
- 《穆斯林的葬礼》读后感
- RocketMQ报错提示logics disk maybe full soon, so reclaim space, -1.0
热门文章
- 汉明码原理解析(清晰实例讲解)
- 查验微信封域名php,如何检测域名网址是否被微信封 微信域名检测接口的实现解析...
- 计算机专业技术业绩,计算机专业职称业绩怎么写
- 一夜之间多翻空,PP多单止盈,棉花认沽大涨,CCS05季节性下跌2022.2.25
- java 主动销毁session,关于java:问题Session的销毁方式到底有哪些
- 软件测试人员棘手的问题,一个很棘手的问题,为什么人员全检后还有不良?
- Facebook社交业务进军中国内地,困难重重
- 架设时间同步服务器/开机自动同步系统时间
- Linux下安装Python,并在Linux下运行python代码文件
- 查看计算机屏幕颜色软件,怎么查看电脑屏幕的颜色的红绿蓝值 查看电脑屏幕的颜色的红绿蓝值的方法...