2013-08-23 10 views
20

elasticsearchquery_stringを使用して大規模なデータセットに対して不利なクエリを実行すると、ほとんどの場合クラスタが停止し、クエリが終了するまでにかなりの時間がかかることがあります。ユーザーが任意のクエリ文字列を指定できるようにすると、重大な問題になる可能性があります。elasticsearchでクエリ時間を制限する方法は?

したがって、クエリにかかる時間やリソースを制限する方法はありますか?例えば10秒後に自動的にクエリを中止するようにelasticsearchに指示すれば、それはかなり助けになります。

答えて

16

request bodyまたはuri requestに「タイムアウト」という検索を渡すことができます。すべての結果を収集する前に検索要求がタイムアウトすると、部分的な結果が返されます。ここで

は10秒(単位はミリ秒である)のURI要求の例です:真:あなたは十分にタイムアウトを低く設定した場合

http://localhost:9200/_search?timeout=10000 

、返されるJSONは「TIMED_OUT」と表示されます。

+16

タイムアウト(ish)の経過後にelasticが応答を返しても、サーバーは(https://github.com/elasticsearch/elasticsearch/issues/3627)クエリの実行が終了するため、サーバーの負荷を制限するのに使用されません。 [#4586](https://github.com/elasticsearch/elasticsearch/pull/4586)と[#2929](https://github.com/elasticsearch/elasticsearch/issues/2929) – Basic

+1

最近の唯一の関連性アップデートはhttps://github.com/elastic/elasticsearch/issues/9156#issuecomment-99557275のようです – Nemo