1. ホーム
  2. elasticsearch

[解決済み] Elasticsearch 2.1: 結果ウィンドウが大きすぎる (index.max_result_window)

2023-02-07 03:47:04

質問

Elasticsearch 2.1から情報を取得し、ユーザーがその結果をページスルーできるようにしています。ユーザーが高いページ数を要求した場合、以下のエラーメッセージが表示されます。

結果ウィンドウが大きすぎます。 にしてください。[10000]以下でなければなりませんが、[10020]でした。より効率的な方法として、scroll apiを参照してください。 を参照してください。この制限は [index.max_result_window] インデックスレベルパラメータを変更することで設定できます。

elasticのドキュメントによると、メモリ消費量が多いため、スクロールapiを使用するためとのことです。

よりも高い値は、検索および検索を実行するシャードごとにヒープメモリのかなりのチャンクを消費する可能性があります。 を消費します。この値をそのままにしておくのが最も安全です。 をそのままにして、深いスクロールにはスクロール API を使用するのが安全です。 https://www.elastic.co/guide/en/elasticsearch/reference/2.x/breaking_21_search_changes.html#_from_size_limits

私は大きなデータセットを取得したいわけではありません。私は、結果セットの非常に高い位置にあるデータセットからスライスを取得したいだけです。また、スクロールのドキュメントにはこうあります。

スクロールはリアルタイムのユーザーリクエストに対応するものではありません。 https://www.elastic.co/guide/en/elasticsearch/reference/2.2/search-request-scroll.html

これにはいくつか疑問が残ります。

1) 結果 10000-10020 に対して "normal" 検索要求を行う代わりに、結果 10020 までスクロールするためにスクロール API を使用した場合、メモリ消費量は本当に少なくなるでしょうか (そうだとしたらなぜでしょうか)?

2) スクロールAPIは私のためのオプションではなく、私は "index.max_result_window" を増やさなければならないようです。どなたか、この件に関する経験をお持ちですか?

3) 私の問題を解決するための他のオプションはありますか?

どのように解決するのですか?

elasticのドキュメントの以下のページで、ディープページングについて説明されています。

https://www.elastic.co/guide/en/elasticsearch/guide/current/pagination.html https://www.elastic.co/guide/en/elasticsearch/guide/current/_fetch_phase.html

ドキュメントのサイズ、シャードの数、および使用するハードウェアによります。 使用するハードウェアにもよりますが、10,000 から 50,000 の結果 (1,000 から 5,000 ページ) をページングすることは完全に可能です。 5,000ページ)の深さをページングすることは、完全に可能です。しかし、十分な大きさの の値が大きい場合、ソート処理は非常に重くなり、膨大な量のCPU、メモリ、バンドを使用することになります。 CPU、メモリ、帯域幅を大量に消費することになる。このような理由から、私たちは強く 深いページングを行わないようお勧めします。