Hello,World

Filter过滤上下文的性能疑问

Elasticsearch | 作者 czgbc | 发布于2020年08月08日 | 阅读数:1513

由于了解到filter性能高,所以在请求中只用了filter,没有做任何评分的query
遇到的疑问是:
虽然指定了获取10篇文章(from:0,size:10),但发现filter过滤的文章越多,响应时延越大,这是为什么?使用ES7.6版本
比如压测时过滤出来的文章是1万多时,时延是19ms
过滤出来的文章是6万多时,时延是30ms

我理解:如果我指定了size,性能不应该和过滤出来的结果集大小有关系
 
已邀请:

bubaixiaoxiong

赞同来自:

可以了解一下 es的 query and fetch 机制
es 查询的大体步骤是 
1.协调节点先查询符合条件的doc id  
2. 排序 
3. 取出前from+size的id 
4. 再去其它节点各个shard去取doc的详细内容
 
从上面这几个步骤来看, 过滤出来的文章越多,则
1. 第1步里返回给协调节点的id数目肯定就越多,这里网络耗时增加,但是应该不会很多
2. 第2步里排序耗时增加
3. 第4步里去取详细内容网络耗时肯定也会增加
 
综上,过滤出来的doc数目越多,时延肯定是增加的

pony_maggie - 公众号:犀牛饲养员的技术笔记

赞同来自:

ES的查询分为query和fetch两个阶段,文档数量越多,主要是query阶段越耗时。
 
可以类比mysql分页查询limit offet, size   同样取出10条数据,下面两条语句的性能差别是很大的
limit 0, 10
limit 10000, 10

要回复问题请先登录注册