Elasticsearch:大數據量下如何做分頁查詢?


背景說明

業務場景中需要做基於ES的分頁查詢,而ES存儲了上億條數據,且數據每天還在不斷增長,如何做分頁查詢呢(注意查詢效率)?

本質就是一個深度分頁查詢的問題,很多人可能會嘗試ES自帶的滾動查詢機制。但在大數據量情況下,此種方式是行不通的(不信的可以自行嘗試哦)。

 

方案前提

1. 產品側:在大數據量分頁情況下,產品層面不允許用戶自行輸入頁碼跳頁;

2. 技術側:ES數據有全局唯一且有序的ID,可以通過相關算法生成。

 

方案設計

1.核心設計思想

經分析,用戶的點擊跳頁行為數據偏移量是有限的。且第1頁和最后1頁的跳轉行為可以有效識別,那么可以將用戶的點擊查詢行為分為幾個場景:

用戶點擊第1頁:可以按照正常的邏輯進行查詢,根據數據要求的排序方向進行順序查詢或倒序查詢;

用戶點擊最后1頁:首先判斷是否是最后1頁;重新計算頁數據展示大小;如果結果是按順序展示,則先按倒序方向進行數據查詢,再將結果進行翻轉展示。如果結果按倒序展示反之操作即可;

用戶點擊其他頁:此種情況較為復雜。因為要重新計算數據的偏移量,所以需要有用戶上次點擊的頁碼信息(例如上次點擊頁碼及對應的第1條數據ID和最后1條數據ID等)進行參照計算。詳見下面的圖例展示。

 

2.方案設計

2.1 定義接口參數

 

2.2 數據查詢邏輯

第1頁查詢:

 

 

最后1頁查詢:

 

 

其他頁查詢:

 

 

代碼實現

java及PHP代碼都已上傳到個人gitee上。(重點說明:代碼僅供學習參考使用,未經作者同意,請勿用於商業用途)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM