您好,登錄后才能下訂單哦!
這篇文章主要介紹“Elasticsearch分頁查詢的問題有哪些”,在日常操作中,相信很多人在Elasticsearch分頁查詢的問題有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Elasticsearch分頁查詢的問題有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Elasticsearch 分頁查詢有個特點,如果你寫一個這樣的查詢語句:
{ "from" : 10, "size" : 10, "query" : {} }
Elasticsearch 會查詢出前 20 條數據,然后截斷前 10 條,只返回 10-20 的數據。
這樣做帶來的副作用很明顯,數據量大的話,越到后面查詢越慢。
所以針對大數據量的查詢,要使用 scroll。這種方式相當于建立了一個游標,標記當前的讀取位置,保證下一次查詢快速取出數據。
但這兩種方式都還有一個小坑需要注意,下面來詳細說明。
可能會出現的問題:
Result window is too large, from + size must be less than or equal to: [10000] but was [10010]. See the scroll api for a more efficient way to request large data sets. This limit can be set by changing the [index.max_result_window] index level setting.
這個報錯信息其實已經說的很明確了,通過這種分頁方式查詢的最大值是 10000,超過 10000 就會報錯。
解決辦法也很簡單,一是針對大數據量查詢采用 scroll 方式;二是增加 index.max_result_window
值的大小,使其支持查詢范圍。
推薦使用 scroll 方式。
可能會出現的問題:
Trying to create too many scroll contexts. Must be less than or equal to: [500]. This limit can be set by changing the [search.max_open_scroll_context] setting.
產生這個錯誤的原因是:
當有大量需要使用 scroll 的請求向 Elasticsearch 請求數據時,系統默認最大 scroll_id 數量是 500,當達到最大值時,導致部分請求沒有 scroll_id 可用,產生報錯。
特別是在高并發場景下,這種問題可能會更加常見。
解決辦法可以增加 search.max_open_scroll_context
值的大小。
但這么解決并不好,更好的辦法是查詢完之后,及時清理 scroll_id。
# python from elasticsearch import Elasticsearch client = Elasticsearch(host, http_auth=(username, password), timeout=3600) es_data = client.search(es_index, query_body, scroll='1m', size=100) scroll_id = es_data['_scroll_id'] client.clear_scroll(scroll_id=scroll_id) # 清理方法
其實,即使我們不手動清理,等過期之后,游標也會自己釋放,這跟使用時的參數有關。
比如 scroll='1m'
代表 1min 后會釋放。
但就像我們使用其他資源一樣,使用完之后及時釋放,養成良好的編碼習慣,系統才能更健壯。
到此,關于“Elasticsearch分頁查詢的問題有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。