· 1 客戶端請求發給某個節點
· 2 節點轉發給個個分片,查詢每個分片上的前10條
· 3 結果返回給節點,整合數據,提取前10條
· 4 返回給請求客戶端
那么當我想要查詢第10條到第20條的數據該怎么辦呢?這個時候就用到分頁查詢了。
淺分頁可以理解為簡單意義上的分頁。它的原理很簡單,就是查詢前20條數據,然后截斷前10條,只返回10-20的數據。這樣其實白白浪費了前10條的查詢。
構造數據:
/**插入一百條數據*/
1.9.1:淺分頁
/**
* 查詢所有的方法
searchRequestBuilder 的 setFrom【從0開始】 和 setSize【查詢多少條記錄】方法實現
* */
1.9.2:分頁優化-深分頁(scroll)
對於上面介紹的淺分頁,當Elasticsearch響應請求時,它必須確定docs的順序,排列響應結果。
如果請求的頁數較少(假設每頁20個docs), Elasticsearch不會有什么問題,但是如果頁數較大時,比如請求第20頁,Elasticsearch不得不取出第1頁到第20頁的所有docs,再去除第1頁到第19頁的docs,得到第20頁的docs。
解決的方式就是使用scroll,scroll就是維護了當前索引段的一份快照信息--緩存(這個快照信息是你執行這個scroll查詢時的快照)在這個查詢后的任何新索引進來的數據,都不會在這個快照中查詢到。但是它相對於from和size,不是查詢所有數據然后剔除不要的部分,而是記錄一個讀取的位置,保證下一次快速繼續讀取。
可以把 scroll 分為初始化和遍歷兩步: 1、初始化時將所有符合搜索條件的搜索結果緩存起來,可以想象成快照; 2、遍歷時,從這個快照里取數據,也就是說,在初始化后對索引插入、刪除、更新數據都不會影響遍歷結果