Elasticsearch _count caché de solicitud de consulta

Sep 10 2020

Tomado de documentos: https://www.elastic.co/guide/en/elasticsearch/reference/7.9/shard-request-cache.html#shard-request-cache

Por defecto, las peticiones caché solo almacenan en caché los resultados de las solicitudes de búsqueda en donde size=0, por lo que no aciertos de caché, pero va a almacenar en caché hits.total, aggregationsy suggestions.

La mayoría de las consultas que se utilizan ahora (consulte Date Math) no se pueden almacenar en caché.

Consultas con secuencias de comandos que utilizan las llamadas a la API que no son deterministas, como Math.random()o new Date()no se almacenan en caché.

Sin embargo, ¿cómo funciona esto con las consultas _count? Las consultas _count se comportan casi exactamente igual que las consultas _search con size=0?

Esperaría que la caché de solicitudes también almacenara en caché las consultas de recuento, pero no pude encontrar ninguna información al respecto.

Respuestas

2 Val Sep 10 2020 at 07:33

Siempre que la documentación no lo diga, vaya a la fuente ;-)

En este caso, si miramos la fuente de RestCountAction(es decir, la clase que maneja el _countpunto final), podemos ver que lo que realmente hace es crear una 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

Además, al construir la respuesta , podemos ver que el countvalor es en realidad el valor de hits.totalde SearchResponse:

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

Entonces, a partir de eso, podemos deducir que las consultas de recuento también se almacenan en caché de facto.