游標查詢scroll

2021-08-17 06:49:22 字數 1259 閱讀 6803

scroll查詢 可以用來對 elasticsearch 有效地執行大批量的文件查詢,而又不用付出深度分頁那種代價。

游標查詢允許我們 先做查詢初始化,然後再批量地拉取結果。 這有點兒像傳統資料庫中的 cursor

。游標查詢會取某個時間點的快照資料。 查詢初始化之後索引上的任何變化會被它忽略。 它通過儲存舊的資料檔案來實現這個特性,結果就像保留初始化時的索引 檢視

一樣。深度分頁的代價根源是結果集全域性排序,如果去掉全域性排序的特性的話查詢結果的成本就會很低。 游標查詢用字段_doc來排序。 這個指令讓 elasticsearch 僅僅從還有結果的分片返回下一批結果。

啟用游標查詢可以通過在查詢的時候設定引數scroll的值為我們期望的游標查詢的過期時間。 游標查詢的過期時間會在每次做查詢的時候重新整理,所以這個時間只需要足夠處理當前批的結果就可以了,而不是處理查詢結果的所有文件的所需時間。 這個過期時間的引數很重要,因為保持這個游標查詢視窗需要消耗資源,所以我們期望如果不再需要維護這種資源就該早點兒釋放掉。 設定這個超時能夠讓 elasticsearch 在稍後空閒的時候自動釋放這部分資源。

/old_index

/_search

?scroll=1m

},"sort":[

"_doc"

],"size"

:1000

}保持游標查詢視窗一分鐘。

關鍵字_doc是最有效的排序順序。

這個查詢的返回結果包括乙個字段_scroll_id`, 它是乙個base64編碼的長字串 ((("scroll_id"))) 。 現在我們能傳遞字段 `_scroll_id_search/scroll查詢介面獲取下一批結果:

/_search

/scroll

注意再次設定游標查詢過期時間為一分鐘。

這個游標查詢返回的下一批結果。 儘管我們指定字段size的值為1000,我們有可能取到超過這個值數量的文件。 

當查詢的時候, 字段size作用於單個分片,所以每個批次實際返回的文件數量最大為size * number_of_primary_shards

注意游標查詢每次返回乙個新字段_scroll_id`。每次我們做下一次游標查詢, 我們必須把前一次查詢返回的字段 `_scroll_id傳遞進去。 當沒有更多的結果返回的時候,我們就處理完所有匹配的文件了。

scroll事件詳解

以前眼高手低,不夠紮實,面試的時候總是處理過,卻想不出來細節,這次開始慢慢整理,蝸牛繼續爬坡 一般情況下,如果出現內容大於瀏覽器的時候,需要新增樣式 overflow scroll 關於scroll的樣式有以下可以根據需求調整 滾動條的設定 1.webkit scrollbar 滾動條整體部分,可以...

scroll家族屬性

首先,scroll家族包括4個屬性 接下來,我們先簡單看一下相關屬性。例1 doctype html html lang en head meta charset utf 8 title title style body style head body script type text html c...

游標查詢簡單學習

7.x版本 設定每次查詢的獲取時間為1m 這個過期時間只需要足夠處理當前批資料即可,而不是處理查詢結果的所有文件需要的時間。可以使用 doc 進行排序 可以避免全域性排序深度分頁 滾動請求具有優化功能,可以使排序順序為時更快 doc。如果要遍歷所有文件而不考慮順序,這是最有效的選擇 get sear...