【Elasticsearch】 index.max_result_window の値を変更する
Elasticsearch 2.1 から、Search API で from + size の値に制限がかかるようになりました。 デフォルトで、10000 を超えると「Result window is too large〜」というエラーが出ます。
この制限は、index.max_result_window を指定することで変更できます。
設定方法
[ Index をこれから作る or 作り直してもよい場合 ]
- elasticsearch.yml の「index.max_result_window: 10000」の値を変更する
- rails を一緒に使っていて、elasticsearch-ruby gem を入れているなら、普通に settings のところに書けます(他の gem でも同じかな?)
settings: { number_of_shards: 1, number_of_replicas: 0, max_result_window: 10000, analysis: { analyzer: { …
[ Index を作り直したくない場合 ]
Index API を使っても変更できます。Kibanaだったら、こんなかんじ↓
PUT index_name/_settings { "index": { "max_result_window": "10000" } }
上限を十分に大きくすれば、エラーは出なくなります。
が、結局は一度指定された位置までの全ドキュメントを読み込んでから
不要な部分を削除して返すので、値が大きくなるとコストがすごくなってしまいます。
状況によっては scroll や search_after の利用を検討します。