You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Spring Data ElasticSearch获取响应中的took字段值?

能否通过Spring Data Elasticsearch获取Elasticsearch响应中的took值?

问题背景

向Elasticsearch发起查询时,得到的响应包含took字段:

{
"took": 16,
"timed_out": false,
"_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
}
}

当前使用的查询代码如下:

SearchHits<SearchPo> findByAllAttributes(String searchText) {
    return elasticsearchRestTemplate.search(buildHeaderSearchQuery(searchText),
        SearchPo.class, IndexCoordinates.of("search"));
}

解决方案

可以获取到took值,具体实现方式如下:

  • SearchHits对象本身没有直接暴露took的访问方法,但可以通过它获取底层的org.elasticsearch.action.search.SearchResponse对象,再从中提取took值。
  • 修改代码示例如下:
SearchHits<SearchPo> searchHits = elasticsearchRestTemplate.search(buildHeaderSearchQuery(searchText),
        SearchPo.class, IndexCoordinates.of("search"));
// 获取took对应的毫秒数,与ES响应中的took字段值一致
long tookMillis = searchHits.getSearchResponse().getTook().getMillis();
  • getTook()返回的是TimeValue类型,调用getMillis()可直接得到响应耗时的毫秒数,对应ES响应里的took字段值。

内容的提问来源于stack exchange,提问作者Java2Avaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:12:05