Elasticsearch _count查询请求缓存

问题描述

来自文档: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查询几乎完全相同?

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

解决方法

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

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...