使用elasticsearch的時候,size的值太大的話會報以下錯誤。
"type":"query_phase_execution_exception","reason":"Result window is too large, from + size must be less than or equal to: [10000] but was [1000000]. 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."}
因為elasticsearch默認限制size是10000。
解決方法:
一種是調整index.max_result_window的大小,調整到盡量大的值。
這里使用另一種方式,使用scroll api讀取數據量超過10000的數據。
scroll api是專門為了讀取大量數據設計的
首先設置每次讀取的數量size和這批請求的有效時間scroll。
POST /index名字/_search?scroll=1m # 這里設置scroll為1m,意味着這批請求有效讀取的時間是一分鍾 { "size": 100, # 每次請求查詢的大小 "query": { # 你的查詢條件 } }
首次讀取會返回一個scroll_id,后續讀取只需要通過scroll_id不斷請求讀取剩余部分的數據,直到最后一批數據讀取結束,后續每批數據返回的數量小於等於第一次請求時設置的size值。
POST /_search/scroll # 不需要填寫index名字 { "scroll" : "1m", # 可選項,填寫將會把scroll_id的有效時間更新 "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==" # 首次提交的scroll_id }
scroll api的官方文檔https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html#request-body-search-scroll