Cache de demande de requête Elasticsearch _count
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 cachehits.total,aggregationsetsuggestions.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()ounew 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
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.