1.from + size
傳統的from+size的方法在數據量小時,客戶端獲取要求有順序時可以使用。
2.scroll + scan
在數據量太大,尤其是需要遍歷全部數據時,應該使用這種方式。
原因:假設每頁大小為10,在獲取第1001頁時,es實際上是向每個分片發送請求第10000到10010的數據,每個分片會進行一次排序,如果有十個分片,就會獲取所有分片的前10個,因此給CPU和內存造成很大的壓力。使用scroll方式,es生成一個快照,并維護一個scroll_id,相當于一個索引下標,這個id有個有效期,在有效期內每次獲取都會遞增。
- scanning scroll 查詢與 standard scroll 查詢有幾點不同:
A scanning scroll 查詢結果沒有排序,結果的順序是doc入庫時的順序;
A scanning scroll 查詢不支持聚合
A scanning scroll最初的查詢結果的“hits”列表中不會包含結果
A scanning scroll 最初的查詢中如果設定了“size”,這個“size”是設定每個分片(shard)的數量,也就是說如果設定size=3,而有5個shard,每次返回結果的最大值就是3*5=15。