Elasticsearch _count-Abfrageanforderungscache
Entnommen aus Dokumenten: https://www.elastic.co/guide/en/elasticsearch/reference/7.9/shard-request-cache.html#shard-request-cache
Standardmäßig werden die Anfragen - Cache nur die Ergebnisse von Suchanfragen zwischenzuspeichern , wo
size=0, so wird es nicht Cache - Hits, aber es wird zwischenzuspeichernhits.total,aggregationsundsuggestions.Die meisten Abfragen, die jetzt verwendet werden (siehe Datumsberechnung), können nicht zwischengespeichert werden.
Skriptabfragen, die nicht deterministische API-Aufrufe verwenden, z. B. nicht zwischengespeichert
Math.random()odernew Date()nicht.
Wie spielt dies jedoch mit _count-Abfragen? _count-Abfragen verhalten sich fast genauso wie _search-Abfragen mit size=0?
Ich würde erwarten, dass der Anforderungscache auch die Anzahl der Abfragen zwischenspeichert, konnte jedoch keine Informationen dazu finden.
Antworten
Wenn die Dokumentation nichts sagt, gehe zur Quelle ;-)
Wenn wir uns in diesem Fall die Quelle von RestCountAction(dh die Klasse, die den _countEndpunkt verarbeitet) ansehen, können wir sehen, dass tatsächlich ein SearchRequestwith erstellt wirdsize: 0
a search request
|
v
SearchRequest countRequest = new SearchRequest(Strings.splitStringByCommaToArray(request.param("index")));
countRequest.indicesOptions(IndicesOptions.fromRequest(request, countRequest.indicesOptions()));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().size(0).trackTotalHits(true);
^
|
with size 0
Wenn wir die Antwort erstellen, können wir außerdem sehen, dass der countWert tatsächlich der Wert von ist hits.totalaus SearchResponse:
builder.field("count", response.getHits().getTotalHits().value);
Daraus können wir schließen, dass Zählabfragen auch de facto zwischengespeichert werden.