Elasticsearch _count-Abfrageanforderungscache

Sep 10 2020

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 zwischenzuspeichern hits.total, aggregationsund suggestions.

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()oder new 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

2 Val Sep 10 2020 at 07:33

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.