能否通过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
相关产品推荐
相关产品推荐

