2017-02-13 2 views
0

Ich brauche alle Dokumente zu erhalten, die mindestens ein Element aus einer Liste von mehr als 1024.Probleme mit großen Bool auf Elasticsearch

Meine Abfrage enthalten ist im Grunde eine Bool Abfrage mit einem sollte und minimum_should_match : 1.

Elasticsearch maxClauseCount ist standardmäßig auf 1024 eingestellt. Ich habe versucht, es auf 4096 zu setzen und die Konfiguration sieht in Ordnung zu sein:

Ich bitte http://myserver:9200/my_index/_settings und erhalte:

... "query": { "bool": { "max_clause_count": "4096" } } ..., Aber wenn ich noch TooManyClauses[maxClauseCount is set to 1024] in meinem Logs bekommen versuchen.

1. Frage: Warum ist das widersprüchlich?

Ich habe gelesen, dass in einigen Fällen ist es besser, einen Filter anstelle eines großen bool verwenden:

Im Allgemeinen würde ich empfehlen, dass die Abfrage neu zu schreiben Begriffe Filter anstelle von Booleschen Abfrage https://discuss.elastic.co/t/too-many-clauses-maxclausecount-is-set-to-1024/61968 zu verwenden

2. Frage: wie kann ich einen Filter verwende die gleiche Logik wie das Mehrfach erhalten sollte auf meinem Beispiel bool? Was ist der beste Bool-Filter oder Filter für diesen Fall?

Antwort

0

Ich bin mir noch nicht sicher, warum Elasticsearch den maxClauseCount-Fehler auslösen, aber ich habe eine alternative Möglichkeit gefunden, meine Abfrage zu strukturieren.

Die (einfache) Lösung besteht darin, Begriffe mit der großen Liste von Elementen zu verwenden. Wenn ich es in eine must benutze bekomme ich den gleichen Fehler, aber mit filter funktioniert es perfekt.

Beispiel:

{ 
    "query": { 
    "bool": { 
     "filter": [ 
     {"terms": {"my_field": ["item1", "item2", ... "itemN"]}} 
     ] 
    } 
    } 
} 

Der einzige Mangel für filter ist, dass:

Die Klausel (Abfrage) müssen Dokumente in passend erscheinen. Im Gegensatz dazu muss die Punktzahl der Abfrage ignoriert werden. https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-bool-query.html

Verwandte Themen