Elasticsearch _count查询请求缓存

时间:2020-09-10 07:22:07

标签: elasticsearch elasticsearch-7

来自文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.9/shard-request-cache.html#shard-request-cache

默认情况下,请求缓存将仅缓存size=0处的搜索请求结果,因此不会缓存点击,但会缓存hits.totalaggregations和{{ 1}}。

现在使用的大多数查询(请参见日期数学)无法缓存。

使用非确定性API调用的脚本查询(例如suggestionsMath.random())不会被缓存。

但是,如何处理_count个查询? _count查询的行为与使用new Date()的_search查询几乎完全相同?

我希望请求缓存也可以缓存计数查询,但是找不到有关它的任何信息。

1 个答案:

答案 0 :(得分:2)

只要文档没有说明,请转到源代码;-)

在这种情况下,如果我们查看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

此外,当building the response时,我们可以看到count的值实际上是hits.total中的SearchResponse的值:

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

因此,从中我们可以推断出实际上也缓存了数量查询。

相关问题