ES深分页
一、背景
1.ES默认分页from+size
2.在大数据量和深度分页的时候,效率非常低
二、效率低原因
1.例如要查第501页的10条数据,from为5000,size为10
2.ES会查询并排序5010条数据,即处理了from+size条数据
3.ES为了性能,限制了分页数量,最大为1万,max_result_window = 10000,因此不能分页到1万条数据以上
4.对于1万条以上的数据查询,ES直接返回查询失败
三、改进
1.方式一、scroll滚动搜索
a.在第一次搜索的时候,保存一个视图快照,之后基于视图快照提供数据
b.无法查询到实时数据
c.查询语句,要指定scroll参数,值为时间窗口,例如scroll=5m
d.第一次查询会返回scroll_id,之后的查询要带着scroll_id参数
2.方式二、search_after
a.ES5之后提供search_after,是假分页方式,根据上一页的最后一条,确定下一页的位置
b.可以查询到实时数据
c.类似于瀑布流式的分页查询
参考:
https://www.cnblogs.com/hello-shf/p/11543453.html