2013-08-23 14 views
20

Wenn Sie query_string in elasticsearch mit einer unglücklichen Abfrage über ein großes Dataset verwenden, können Sie den Cluster fast herunterfahren, und es kann ziemlich lange dauern, bis die Abfrage beendet ist. Dies kann ein schwerwiegendes Problem sein, wenn Sie den Benutzern erlauben, beliebige Abfragezeichenfolgen anzugeben.Wie kann die Abfragezeit in elasticsearch begrenzt werden?

Gibt es also eine Möglichkeit, die Zeit und/oder Ressourcen der Abfrage zu begrenzen? Wenn Sie elasticsearch sagen könnten, dass die Abfrage automatisch nach etwa 10 Sekunden abgebrochen wird, würde das ziemlich viel helfen.

Antwort

16

Sie können eine Suche "Timeout" in der request body oder in der uri request übergeben. Wenn die Suchanfrage vor dem Sammeln aller Ergebnisse abläuft, werden die Teilergebnisse zurückgegeben.

Hier ist ein uri Anfrage Beispiel für 10 Sekunden (Einheiten in Millisekunden):

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

Wenn Sie das Timeout niedrig genug eingestellt, die zurück json zeigt "timed_out": true.

+16

Beachten Sie, dass dies zwar dazu führt, dass elastic eine Antwort zurückgibt, nachdem die Zeitüberschreitung abgelaufen ist (ish), aber [verhindert nicht] (https://github.com/elasticsearch/elasticsearch/issues/3627) den Server von Beenden der Abfrageausführung und daher keine Einschränkung der Serverlast. Siehe auch [# 4586] (https://github.com/elasticsearch/elasticsearch/pull/4586) und [# 2929] (https://github.com/elasticsearch/elasticsearch/issues/2929) – Basic

+1

Die einzig relevanten jüngsten Aktualisierungen scheinen https://github.com/elastic/elasticsearch/issues/9156#issuecomment-99557275 zu sein – Nemo

Verwandte Themen