Elasticsearch 分页查询from VS scroll

    由于工作需要,最近用到了ES的scroll 滚动分页查询,再此总结强化一下,如有错误,请多多指教。

    Elasticsearch 是一个实时的分布式搜索与分析引擎,被广泛用来做全文搜索、结构化搜索、结果分析。如果搜索的结果比较小时,效率比较不明显,当结果数量是百万级,如果还使用分页检索,效率就会比较差。

    分页检索即from-size形式,from指的是从哪里开始拿数据,size是结果集中返回的文档个数。from-size的工作原理是:如size=10&from=100,那么Elasticsearch会从每个分片里取出110条数据,然后汇集到一起再排序,取出101~110序号的文档。并且每次请求,它都会重新排一次序,拿出符合要求的数据。那如果from为50万的时候呢?由此可见,from-size的效率必然不会很高,特别是分页越深,需要排序的数据越多,其效率就越低。

    这时就可以使用Scroll。Scroll的工作原理的它先根据条件做一次初始化搜索,把所有符合要求的结果缓存起来形成一个快照,然后持续地、批量地从快照里拉取数据直到没有数据剩下。而这时对索引数据的插入、删除、更新都不会影响遍历结果,因此scroll 并不适合用来做实时搜索。如何搜索类型是Scan,则告诉Elasticsearch不用对结果集进行排序,只要分片里还有结果可以返回,就返回一批结果。scroll- scan使用中不能跳页获取结果,必须一页接着一页获取。

Elasticsearch 分页查询from VS scroll_第1张图片

实际返回的数量是size*分片数

你可能感兴趣的:(Elasticsearch 分页查询from VS scroll)