Ich benutze den AWS ElasticSearch Service (1.5.2) und empfängt mehr als 100 Anfragen/Sek. Ohne Probleme.Filter auf booleschem Feld erhöht Latenz und CPU
Fast jede Abfrage hat Geo-Filter, Volltext-Filter, Ganzzahl-Filter ... Aber ich habe ein Problem, einen einfachen Filter hinzufügen mehr; ein boolescher Termfilter.
{
"from" : 0,
"size" : 10,
"query" : {
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"and" : {
"filters" : [ {
"bool" : {
"must" : [ {
"terms" : {
"my_boolean_field" : [ false ]
}
},
{
"range" : {
"_timestamp" : {
"from" : null,
"to" : "2016-05-04T15:12:00Z",
"include_lower" : true,
"include_upper" : false
}
}
} ]
}
}, {
"geo_distance" : {
"rounded_location" : [ -8.42, 42.24 ],
"distance" : "300000m",
"distance_type" : "plane",
"optimize_bbox" : "indexed"
}
} ]
}
}
}
},
"sort" : [ {
"_geo_distance" : {
"rounded_location" : [ {
"lat" : 42.24,
"lon" : -8.42
} ],
"unit" : "m"
}
}, {
"date" : {
"order" : "desc"
}
}, {
"price" : {
"order" : "asc"
}
} ]
}
Sobald die Boolesche Filter hinzugefügt wird, die CPU in allen Knoten Elasticsearch steigt von 10 bis 30% und während 10-15 Minuten die durchschnittliche Latenzzeit erhöht sich von 20 bis 400 ms nach einer Weile Latenzen gehen zurück auf normale Zahlen aber CPU nicht.
Dieses boolesche Feld ist ordnungsgemäß zugeordnet und kann durchsucht werden ... hat jemand einen Hinweis auf dieses Problem? (Die Abfrage wird aufgrund der offiziellen Java-Bibliothek, die ich verwende, mit "Begriffen" anstelle von "Begriff" gebildet.
können Sie die gleiche Abfrage versuchen, aber Swap-Positionen zwischen den 'terms' boolean Filter und dem' range' einem in der "müssen" -Klausel? –
Danke für die Antwort! Ich habe das versucht, und ich habe auch versucht, den Booleschen Wert aus dem booleschen Abschnitt auf die gleiche Ebene des geo_location-Filters zu setzen ... Und das Ergebnis war mehr oder weniger das gleiche. –
Jeder Speicher (Heap) Druck während dieser hohen Latenzzeiten? Erhöhte Anzahl und/oder Dauer für die alten GCs? –