Кеш запросов Elasticsearch _count

Sep 10 2020

Взято из документов: 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?

Я ожидал, что кеш запросов также будет кэшировать запросы подсчета, но не смог найти никакой информации об этом.

Ответы

2 Val Sep 10 2020 at 07:33

Если в документации не говорится, перейдите к источнику ;-)

В этом случае, если мы посмотрим на источник 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 также де-факто кэшируются.