Elasticsearch的遊標查詢
在做大批量查詢的時候,比如批量匯出資料的時候可以使用遊標(scroll)查詢,單純的setFrom分頁的方式在資料量變大以後效能下降。
用遊標可以用來對 Elasticsearch 有效地執行大批量的文件查詢,而又不用付出深度分頁那種代價。
具體的時候很簡單就是需要維持一個scrollId,也就是首次查詢以後就會獲得一個scrollId,然後後面的查詢傳遞這個scrollId就可以查詢下一批資料。
遊標查詢的本質其實就是快取了一個查詢結果,然後分批返回,scrollId用base64解碼可以檢視,本質上對應了快取的結果。
既然用到了快取那肯定存在快取管理的問題,這裡有兩個點
- 所有遊標查詢都需要設定一個過期時間,超過過期時間以後的查詢會報錯。這裡的過期時間在每次請求之後會延長,所以這裡的過期時間是每批次的過期時間,而不是整個查詢集合的時間
- 到了過期時間就會自動過期,釋放空間,如果要提前釋放可以主動呼叫ClearScrollRequest
如果快取有效時間設定的過長,且沒有回收,容易導致整個叢集出現空間,所以這個值最好精確設定。
在當前場景(批量匯出資料)下其實請求是連續的,只需要設定一個比較小的值,考慮本身的響應時間和可能的網路問題,根據具體場景1s~2s都是可以的。文件示例中是1分鐘,最好根據自己的情況修改。