Cache de demande de requête Elasticsearch _count

Sep 10 2020

Tiré de la documentation: https://www.elastic.co/guide/en/elasticsearch/reference/7.9/shard-request-cache.html#shard-request-cache

Par défaut, les demandes cache ne mettent en cache les résultats des requêtes de recherche où size=0, il ne cache hits, mais il en cache hits.total, aggregationset suggestions.

La plupart des requêtes qui utilisent maintenant (voir Date Math) ne peuvent pas être mises en cache.

Requêtes scriptées qui utilisent les appels d'API qui ne sont pas déterministes, tels que Math.random()ou new Date()ne sont pas mis en cache.

Cependant, comment cela joue-t-il avec les requêtes _count? Les requêtes _count se comportent presque exactement de la même manière que les requêtes _search avec size=0?

Je m'attendrais à ce que le cache de demande cache également les requêtes de comptage, mais je n'ai trouvé aucune information à ce sujet.

Réponses

2 Val Sep 10 2020 at 07:33

Chaque fois que la documentation ne le dit pas, allez à la source ;-)

Dans ce cas, si nous regardons la source de RestCountAction(c'est-à-dire la classe gérant le _countpoint final), nous pouvons voir que ce qu'elle fait réellement est de créer un SearchRequestavecsize: 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

En outre, lors de la construction de la réponse , nous pouvons voir que la countvaleur est en fait la valeur de hits.totaldu SearchResponse:

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

Donc, à partir de cela, nous pouvons en déduire que les requêtes count sont également mises en cache de facto.