2013-08-23 11 views
20

Se si utilizza query_string in elasticsearch con una query sfortunata su un set di dati di grandi dimensioni, è possibile quasi ridurre il cluster e può richiedere parecchio tempo prima che la query sia terminata. Questo può essere un problema serio se si consente agli utenti di specificare stringhe di query arbitrarie.Come limitare il tempo di interrogazione in elasticsearch?

Quindi, esiste un modo per limitare il tempo e/o le risorse utilizzate dalla query? Se si potesse dire a elasticsearch di interrompere automaticamente l'interrogazione dopo, diciamo, 10 secondi, sarebbe di grande aiuto.

risposta

16

È possibile passare una ricerca "timeout" nello request body o nello uri request. Se la richiesta di ricerca scade prima di raccogliere tutti i risultati, i risultati parziali verranno restituiti.

Ecco un esempio di richiesta di uri per 10 secondi (le misure sono in millisecondi):

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

Se si imposta il timeout abbastanza basso, il JSON restituita mostrerà "timed_out": vero.

+16

Si noti che, sebbene ciò renda elastica la restituzione di una risposta dopo che è trascorso il timeout (ish), [non impedisce] (https://github.com/elasticsearch/elasticsearch/issues/3627) il server da terminare l'esecuzione della query e quindi non è utile per limitare il carico del server. Vedi anche [# 4586] (https://github.com/elasticsearch/elasticsearch/pull/4586) e [# 2929] (https://github.com/elasticsearch/elasticsearch/issues/2929) – Basic

+1

L'unico recente rilevante gli aggiornamenti sembrano essere https://github.com/elastic/elasticsearch/issues/9156#issuecomment-99557275 – Nemo

Problemi correlati