1. from+size
es 默認采用的分頁方式是 from+ size 的形式,在深度分頁的情況下,這種使用方式效率是非常低的,比如
from = 5000, size=10, es 需要在各個分片上匹配排序並得到5000*10條有效數據,然后在結果集中取最后10條,
es默認是10000條數據,可以通過設置max_result_window 值來改變最大數據量;
2.scroll
為了滿足深度分頁的場景,es 提供了 scroll 的方式進行分頁讀取。原理上是對某次查詢生成一個游標 scroll_id , 后續的查詢只需要根據這個游標去取數據,直到結果集中返回的 hits 字段為空,就表示遍歷結束。scroll_id 的生成可以理解為建立了一個臨時的歷史快照,在此之后的增刪改查等操作不會影響到這個快照的結果。
scroll方式官方的建議並不是用於實時的請求,因為每一個 scroll_id 不僅會占用大量的資源(特別是排序的請求),而且是生成的歷史快照,對於數據的變更不會反映到快照上。這種方式往往用於非實時處理大量數據的情況,比如要進行數據遷移或者索引變更之類的。
3.search_after