ES分页

ES分页查询指定页时,需要从头查起,即需要查询出前置页 + 当前页的数据,然后返回当前页的数据。以操作文件举例,例如要取文件的第41行到50行,需要执行head -n 50 file | tail -n 10。所以使用from…size进行深分页查询时必然会消耗性能。

一、from…size的限制

1)分页查询语法

1
2
3
4
5
6
7
GET /_search
{
"from" : 0, "size" : 10,
"query" : {
"term" : { "user" : "kimchy" }
}
}

2)from…size的限制

Note that from + size can not be more than the index.max_result_window index setting which defaults to 10,000.

官网上说,通过from+size去查询时,页数越深其消耗的堆内存和时间越长。

二、深分页

1)Search After

适合实时深分页查询,利用上次结果帮助去索引下一页。

2)Scroll

适合非实时的深分页查询,其会进行指定时间的缓存。

三、深分页是否必须

从官网的信息来看,深分页似乎不支持跳页,只能执行下一页。而在大部分深分页的场景下,如日志查询,用户其实并不会去翻页。

所以,有些深分页的需求是伪需求,可以转换为增加条件转换为非深分页。

# 参考

  1. search-request-from-size

评论