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

 

posted @ 2022-03-28 14:03  牧云文仔  阅读(342)  评论(0编辑  收藏  举报