今天使用es的分页查询时报了一个错误,大致内容就是from+size的数据大于10000。这个错误的原因是,ES的默认值为1万,可以修改配置文件实现。不过有一个更高效的方法,即使用是scroll解决。该方案也是解决深度分页问题的主要方式。
DSL
使用DSL语句的方式如下。
发送查询的结果如下。
结果的第一行就是游标,我们使用该游标,继续往下执行。直接添加游标信息即可,不需要索引等信息。
查询结果如下,第一行依旧是游标值,且数值不变。
High Level REST Client
High Level REST Client的使用 官网有教程,原理也是一样的。
官网教程
这里给下测试结果,4800万数据,每次读取10000条,耗时两秒效率非常高。
直击面试
ES的面试题,深度分页问题是常考题。使用该方案可以很好地解决深度分页问题。通过游标遍历下一页,效果类似微博的下滑刷新结果。