Кеш запросов Elasticsearch _count
Взято из документов: https://www.elastic.co/guide/en/elasticsearch/reference/7.9/shard-request-cache.html#shard-request-cache
По умолчанию, запросы кэш будет кэшировать только результаты поисковых запросов , где
size=0, так что это не хиты кэш, но он будет кэшироватьhits.total,aggregationsиsuggestions.Большинство запросов, которые используются сейчас (см. Математика дат), нельзя кэшировать.
Подготовленные запросы , которые используют вызовы API , которые недетерминированы, например ,
Math.random()илиnew Date()не кэшируются.
Однако как это работает с запросами _count? Запросы _count ведут себя почти так же, как запросы _search с size=0?
Я ожидал, что кеш запросов также будет кэшировать запросы подсчета, но не смог найти никакой информации об этом.
Ответы
Если в документации не говорится, перейдите к источнику ;-)
В этом случае, если мы посмотрим на источник RestCountAction(т.е. для обработки класса _countконечной точки), мы можем видеть, что это на самом деле создает SearchRequestсsize: 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
Кроме того, при построении ответа мы видим, что countзначение на самом деле является значением hits.totalиз SearchResponse:
builder.field("count", response.getHits().getTotalHits().value);
Таким образом, из этого мы можем сделать вывод, что запросы count также де-факто кэшируются.