问题描述
默认情况下,请求缓存将仅缓存
size=0
处的搜索请求结果,因此不会缓存点击,但会缓存hits.total
,aggregations
和{{ 1}}。现在使用的大多数查询(请参见日期数学)无法缓存。
使用非确定性API调用的脚本查询(例如
suggestions
或Math.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);
因此,从中我们可以推断出实际上也缓存了数量查询。