elasticsearch中query和filter的区别
参考博客来自:
query关注点:此文档与此查询子句的匹配程度如何?
filter关注点:此文档和查询子句匹配吗?
query 上下文的条件是用来给文档打分的,匹配越好 _score 越高;filter 的条件只产生两种结果:符合与不符合,后者被过滤掉。 这个 总结可以
2、Query检索细化关注点
1)是否包含?
确定文档是否应该成为结果的一部分.
2)相关度得分多少?
除了确定文档是否匹配外,查询子句还计算了表示文档与其他文档相比匹配程度的_score。
3)得分越高,相关度越高。
更相关的文件,在搜索排名更高。
典型应用场景:
1)全文检索——这种相关性的概念非常适合全文搜索,因为很少有完全“正确”的答案。
举例如下:
文档中存在字段hotel_name:“上海浦东香格里拉酒店”
IK实际分词结果如下:
上海浦东,上海,浦东,香格里拉,格里,里拉,酒店。
也就是说,搜索以上关键词都能搜到:hotel_name:“上海浦东香格里拉酒店”的酒店。这些都是“相关”的。
但是搜索:“香格里” 是搜索不到结果的。
2)包含单词“run”, 但也匹配"runs", "running", "jog"或者"sprint"。(都是奔跑的意思)
3、filter过滤细化关注点
1)是否包含?
确定是否包含在检索结果中,回答只有“是”或“否”。
2)不涉及评分。
在搜索中没有额外的相关度排名。
3)针对结构化数据。
适用于完全精确匹配,范围检索。
参见官网举例:
以下场景适用于filter过滤检索:
举例1:时间戳timestamp 是否在2015至2016年范围内?
举例2:状态字段status 是否设置为“published”?
4)更快。
只确定是否包括结果中,不需要考虑得分。
为什么会更快?——经常使用的过滤器将被Elasticsearch自动缓存,以提高性能。
过滤(filter)的目标是减少必须由评分查询(query)检查的文档数量。
6、使用场景
全文检索以及任何使用相关性评分的场景使用query检索。
除此之外的其他使用filter过滤器过滤。
举例
- GET /_search
- {
- "query": {
- "bool": {
- "must": [
- { "match": { "title": "Search" }},
- { "match": { "content": "Elasticsearch" }}
- ],
- "filter": [
- { "term": { "status": "published" }},
- { "range": { "publish_date": { "gte": "2015-01-01" }}}
- ]
- }
- }
- }
elasticsearch中query和filter的区别的更多相关文章
- Elasticsearch 之 query与filter区别
转载: http://xiaorui.cc/category/elasticsearch/ http://blog.csdn.net/asia_kobe/article/details/5056301 ...
- Elasticsearch DSL中Query与Filter的不同
Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. 举个DSL例子 GET _search { "query": { ...
- elasticsearch query 和 filter 的区别
Query查询器 与 Filter 过滤器 尽管我们之前已经涉及了查询DSL,然而实际上存在两种DSL:查询DSL(query DSL)和过滤DSL(filter DSL).过滤器(filter)通常 ...
- Elasticsearch中text与keyword的区别
text类型 1:支持分词,全文检索,支持模糊.精确查询,不支持聚合,排序操作; 2:test类型的最大支持的字符长度无限制,适合大字段存储: 使用场景: 存储全文搜索数据, 例如: 邮箱内容.地址. ...
- Elasticsearch query和filter的区别
1.关于Query context和filter context 查询语句的表现行为取决于使用了查询上下文方式还是过滤上下文方式. Query context:查询上下文,回答了“文档是如何被查询语句 ...
- thinkPHP中 query()和execute()的区别
query()执行的是查询(select)的SQL语句. execute()执行的是插入(insert)和修改(update)的SQL语句.execute()方法将返回影响的记录数. 如果在TP中使用 ...
- jQuery中find和filter的区别
本文来自:http://blog.csdn.net/woshixuye/article/details/7255260 这是jQuery里常用的2个方法. 他们2者功能是完全不同的,而初学者往往会被误 ...
- jQuery中find()和filter()的区别
filter(expr):筛选出与指定表达式匹配的元素的元素集合,其中expr可以是多个选择器的组合.是对自身集合元素的筛选. find()会在元素内寻找匹配元素,而filter()是筛选元素:是对它 ...
- JQ中find()与filter()的区别
刚开始学的时候,对于find()和filter()有点理不清楚,下面通过案例相信就可以很快的区分清楚 以下是代码 find弹出的是 filter()弹出的是 下面我们添加div的class是rain ...
随机推荐
- tomcat漏洞利用总结
一.后台war包getshell 漏洞利用: tomcat在conf/tomcat-users.xml配置用户权限 <?xml version="1.0" encoding= ...
- 性能测试之Docker监控
微服务.大中台盛行的当下,容器化已经被广泛使用.在性能测试过程中,对容器的监控模型构建也是必不可少的. 我们性能测试监控模型的构建一直是围绕着Prometheus和Grafana来展开的.她们可以快速 ...
- 【Android】SDK的配置
1:Android Studio 下载 安装后创建项目 2: 打开settings 3:下载后,配置SDK 4:下载jdk1.8.0_74.rar 解压 加入环境变量 5:下载夜神模拟器,加 ...
- 50个SQL语句(MySQL版) 建表 插入数据
本学期正在学习数据库,前段时间老师让我们做一下50个经典SQL语句,当时做的比较快,有一些也是百度的,自我感觉理解的不是很透彻. 所以从本篇随笔开始,我将进行50个经典SQL语句的复盘,加深理解. 答 ...
- SpringBoot—单元测试模板(controller层和service层)
介绍 概述 在开发过程中,我们经常会一股脑的写各种业务逻辑,经常等全部大功告成的时候,打个jar包放环境里跑跑看看能不能通,殊不知在各个业务方法中已经漏洞百出,修复一个打一个包,再继续修复,这种效 ...
- Rocket - debug - Example: Write Memory
https://mp.weixin.qq.com/s/on1LugO9fTFJstMes3T2Xg 介绍riscv-debug的使用实例:使用三种方法写内存. 1. Using System Bus ...
- Ondemand和Interactive gonernor工作逻辑简述
ondemand 简述: 1.采样时间:sampling_rate,单位us 2.cpu usage是仅统计最新1us的一个smaple周期,以%体现cpu busy程度. 3.一般情况下,next频 ...
- Java实现 LeetCode 816 模糊坐标(暴力)
816. 模糊坐标 我们有一些二维坐标,如 "(1, 3)" 或 "(2, 0.5)",然后我们移除所有逗号,小数点和空格,得到一个字符串S.返回所有可能的原始 ...
- 06.Django-用户认证
用户认证 Django 内置一个 auth 模块,帮助用户实现注册.登录.注销以及修改密码等功能,帮助开发者省去了很多功夫 用于认证的数据表 auth_user User是auth模块中维护用户信息的 ...
- Spring AOP—注解配置方法的使用
Spring除了支持Schema方式配置AOP,还支持注解方式:使用@AspectJ风格的切面声明. 1 启用对@AspectJ的支持 Spring默认不支持@AspectJ风格的切面声明,为了支持需 ...