由于了解到filter性能高,所以在请求中只用了filter,没有做任何评分的query
遇到的疑问是:
虽然指定了获取10篇文章(from:0,size:10),但发现filter过滤的文章越多,响应时延越大,这是为什么?使用ES7.6版本
比如压测时过滤出来的文章是1万多时,时延是19ms
过滤出来的文章是6万多时,时延是30ms
我理解:如果我指定了size,性能不应该和过滤出来的结果集大小有关系
遇到的疑问是:
虽然指定了获取10篇文章(from:0,size:10),但发现filter过滤的文章越多,响应时延越大,这是为什么?使用ES7.6版本
比如压测时过滤出来的文章是1万多时,时延是19ms
过滤出来的文章是6万多时,时延是30ms
我理解:如果我指定了size,性能不应该和过滤出来的结果集大小有关系
2 个回复
bubaixiaoxiong
赞同来自:
es 查询的大体步骤是
1.协调节点先查询符合条件的doc id
2. 排序
3. 取出前from+size的id
4. 再去其它节点各个shard去取doc的详细内容
从上面这几个步骤来看, 过滤出来的文章越多,则
1. 第1步里返回给协调节点的id数目肯定就越多,这里网络耗时增加,但是应该不会很多
2. 第2步里排序耗时增加
3. 第4步里去取详细内容网络耗时肯定也会增加
综上,过滤出来的doc数目越多,时延肯定是增加的
pony_maggie - 公众号:犀牛饲养员的技术笔记
赞同来自:
可以类比mysql分页查询limit offet, size 同样取出10条数据,下面两条语句的性能差别是很大的