我在使用Elasticsearch進行search查詢的過程中,出現了Result window is too large問題。
這裡簡單做一個報錯復現:

In [1]: import requests

In [2]: requests.get(`http://127.0.0.1:9200/cmdb-now/_search?page=1&size=10000000`).json()
Out[2]:
{
    u`error`: {
        u`failed_shards`: [
            {
                u`index`: u`cmdb-now`,
                u`node`: u`ldeZMZRAR6uZpAiIr5QxBQ`,
                u`reason`: {
                    u`reason`: u`Result window is too large, from + size must be less than or equal to: [10000] but was [10000000]. 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 parameter.`,
                    u`type`: u`query_phase_execution_exception`
                },
                u`shard`: 0
            }
        ],
        u`grouped`: True,
        u`phase`: u`query`,
        u`reason`: u`all shards failed`,
        u`root_cause`: [
            {
                u`reason`: u`Result window is too large, from + size must be less than or equal to: [10000] but was [10000000]. 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 parameter.`,    
                u`type`: u`query_phase_execution_exception`
            }
        ],
        u`type`: u`search_phase_execution_exception`
    },
    u`status`: 500
}

從上面的報錯資訊,可以看到ES提示我結果視窗太大了,目前最大值為10000,而我卻要求給我10000000。並且在後面也提到了要求我修改index.max_result_window引數來增大結果視窗大小。

我google了修改方法,命令如下:

curl -XPUT http://127.0.0.1:9200/cmdb-now/_settings -d `{ "index" : { "max_result_window" : 100000000}}`

需要注意的是,cmdb-now這裡是我ES索引的名字,因此你需要它替換成你對應的索引名稱進行修改。
有關官方針對index的相關配置介紹,可以點選這裡進行檢視。