ES 23 - 检索和过滤的区别 (query vs. filter)
本文以 ES 6.6.0 版本为例进行演示.
1 filter与query示例
1.1 准备测试数据
PUT website/_doc/1
{
"title": "小白学ES01",
"desc": "the first blog about es",
"level": 1,
"post_date": "2018-10-10",
"post_address": {
"country": "China",
"province": "GuangDong",
"city": "GuangZhou"
}
}
PUT website/_doc/2
{
"title": "小白学ES02",
"desc": "the second blog about es",
"level": 3,
"post_date": "2018-11-11",
"post_address": {
"country": "China",
"province": "ZheJiang",
"city": "HangZhou"
}
}
1.2 搜索测试
搜索条件: 搜索博客等级(level)大于等于2, 同时发布日期(post_date)是2018-11-11的博客:
(1) 不使用filter:
GET website/_doc/_search
{
"query": {
"bool": {
"must": [
{ "match": { "post_date": "2018-11-11" } },
{ "range": { "level": { "gte": 2 } } }
]
}
}
}
// 结果信息:
"hits": {
"total": 1,
"max_score": 2.0,
"hits": [
{
"_index": "website2",
"_type": "blog",
"_id": "2",
"_score": 2.0, // 评分为2.0
"_source": {
"title": "小白学ES02",
"desc": "the second blog about es",
"level": 3,
"post_date": "2018-11-11",
"post_address": {
"country": "China",
"province": "ZheJiang",
"city": "HangZhou"
}
}
}
]
}
(2) 使用filter:
GET website/_doc/_search
{
"query": {
"bool": {
"must": {
"match": { "post_date": "2018-11-11" }
},
"filter": {
"range": { "level": { "gte": 2 } }
}
}
}
}
// 结果信息:
"hits": {
"total": 1,
"max_score": 1.0,
"hits": [
{
"_index": "website2",
"_type": "blog",
"_id": "2",
"_score": 1.0, // 评分为1.0
"_source": {
"title": "小白学ES02",
"desc": "the second blog about es",
"level": 3,
"post_date": "2018-11-11",
"post_address": {
"country": "China",
"province": "ZheJiang",
"city": "HangZhou"
}
}
}
]
}
2 filter与query的区别
filter和query一起使用时, 会先执行filter.
2.1 相关度处理上的不同
filter —— 只根据搜索条件过滤出符合的文档, 将这些文档的评分固定为1, 忽略TF/IDF信息, 不计算相关度分数;
query —— 先查询符合搜索条件的文档, 然后计算每个文档对于搜索条件的相关度分数, 再根据评分倒序排序.
建议:
- 如果对搜索结果有排序的要求, 要将最匹配的文档排在最前面, 就用query;
- 如果只是根据一定的条件筛选出部分数据, 不关注结果的排序, 就用filter.
2.2 性能上的对比
filter 性能更好, 无排序 —— 不计算相关度分数, 不用根据相关度分数进行排序, 同时ES内部还会缓存(cache)比较常用的filter的数据 (使用bitset <0或1> 来记录包含与否).
query 性能较差, 有排序 —— 要计算相关度分数, 要根据相关度分数进行排序, 并且没有cache功能.
2.3 对比结论
业务关心的、需要根据匹配的相关度进行排序的搜索条件 放在
query中;业务不关心、不需要根据匹配的相关度进行排序的搜索条件 放在
filter中.
版权声明
出处: 博客园 马瘦风的博客(https://www.cnblogs.com/shoufeng)
感谢阅读, 如果文章有帮助或启发到你, 点个[好文要顶
ES 23 - 检索和过滤的区别 (query vs. filter)的更多相关文章
- ES的Query、Filter、Metric、Bucketing使用详解
由于笔者在实际项目仅仅将ES用作索引数据库,并没有深入研究过ES的搜索功能.而且鉴于笔者的搜索引擎知识有限,本文将仅仅介绍ES简单(非全文)的查询API. 笔者原本打算在本文中介绍聚合API的内容,但 ...
- Elasticsearch 之 query与filter区别
转载: http://xiaorui.cc/category/elasticsearch/ http://blog.csdn.net/asia_kobe/article/details/5056301 ...
- elasticsearch query 和 filter 的区别
Query查询器 与 Filter 过滤器 尽管我们之前已经涉及了查询DSL,然而实际上存在两种DSL:查询DSL(query DSL)和过滤DSL(filter DSL).过滤器(filter)通常 ...
- Elasticsearch系列(二)--query、filter、aggregations
本文基于ES6.4版本,我也是出于学习阶段,对学习内容做个记录,如果文中有错误,请指出. 实验数据: index:book type:novel mappings: { "mappings& ...
- Elasticsearch DSL中Query与Filter的不同
Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. 举个DSL例子 GET _search { "query": { ...
- ElasticSearch - query vs filter
query vs filter 来自stackoverflow Stackoverflow - queries-vs-filters Question 题主希望知道Query和Filter的区别 An ...
- 以bank account 数据为例,认识elasticsearch query 和 filter
Elasticsearch 查询语言(Query DSL)认识(一) 一.基本认识 查询子句的行为取决于 query context filter context 也就是执行的是查询(query)还是 ...
- elasticsearch中query和filter的区别
参考博客来自: https://mp.weixin.qq.com/s/tiiveCW3W-oDIgxvlwsmXA?utm_medium=hao.caibaojian.com&utm_sour ...
- MySQL(二)数据的检索和过滤
使用频率最高的SQL语句应该就是select语句了,它的用途就是从一个或多个表中检索信息,使用select检索表数据必须给出至少两条信息:想选择什么,以及从什么地方选择 一.检索数据 1.检索单个列 ...
随机推荐
- 跟我学SpringCloud | 第二篇:注册中心Eureka
Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...
- Ember报错
错误是ember-data的版本不对 解决办法是: npm install --save ember-data@2.14.2 //bing.com中去查资料,应有尽有
- Node中的cookie的使用
1.为什么使用cookie? 因为HTTP是无状态协议.简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到,这是同一个浏览器在访问同一个网站.每一次的访问,都是没有任何关系 ...
- Programming In Lua 第五章
1, 2, 3, 4, 5, 6, 7, 8, 9, 第9点非常重点. 10,
- 32| 无实例无真相:基于LoadRunner实现企业级服务器端性能测试的实践(上)
- python的数据类型之字符串(二)
字符串常见操作 如有字符串mystr = 'hello xiaose',以下是常见的操作 1.find 检测某个字符串是否包含在 mystr中,如果是返回开始的索引值,否则返回-1 格式:mystr. ...
- Oracle Awr报告_awr报告解读_基础简要信息
导出 关于awr报告的导出,上一篇博客已经进行过讲述了.博客链接地址:https://www.cnblogs.com/liyasong/p/oracle_report1.html 这里就不再赘述. ...
- Ural 2062:Ambitious Experiment(树状数组 || 分块)
http://acm.timus.ru/problem.aspx?space=1&num=2062 题意:有n个数,有一个值,q个询问,有单点询问操作,也有对于区间[l,r]的每个数i,使得n ...
- ajax 的简单请求,get的加法运算,post加法运算,用户登录认证
视图函数部分 from django.shortcuts import render, HttpResponse import time from app01.models import User i ...
- 文档管理器 PDFelement Pro v6.8.4.3921 精简绿色版
下载地址:点我 PDFelement是PDF全套解决方案专家,专注于PDF的创建.编辑.转换.标注.保护.管理.水印.压缩.签名等功能.Wondershare PDFelement是款国产优秀的专业P ...