Elasticsearch _count cache delle richieste di query

Sep 10 2020

Tratto da documenti: https://www.elastic.co/guide/en/elasticsearch/reference/7.9/shard-request-cache.html#shard-request-cache

Per impostazione predefinita, le richieste di cache nella cache solo i risultati di richieste di ricerca in cui size=0, in modo che non riscontri nella cache, ma sarà in cache hits.total, aggregationse suggestions.

La maggior parte delle query che utilizzano adesso (vedere Date Math) non possono essere memorizzate nella cache.

Query con script che utilizzano le chiamate API che non sono deterministiche, ad esempio Math.random()o new Date()non vengono memorizzate nella cache.

Tuttavia, come funziona con le query _count? _count query si comportano quasi esattamente allo stesso modo delle _search con size=0?

Mi aspetto che anche la cache richiesta per memorizzare nella cache le query di conteggio, ma non sono riuscito a trovare alcuna informazione al riguardo.

Risposte

2 Val Sep 10 2020 at 07:33

Ogni volta che la documentazione non lo dice, vai alla fonte ;-)

In questo caso, se guardiamo l'origine di RestCountAction(cioè la classe che gestisce l' _countendpoint), possiamo vedere che ciò che effettivamente fa è creare un SearchRequestconsize: 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

Inoltre, quando si costruisce la risposta , possiamo vedere che il countvalore è effettivamente il valore di hits.totalda SearchResponse:

    builder.field("count", response.getHits().getTotalHits().value);

Quindi, da questo, possiamo dedurre che anche le query di conteggio sono di fatto memorizzate nella cache.