使用Spring Data ElasticSearch的UpdateQuery如何获取ES返回的源数据
解决Spring Data Elasticsearch更新后获取源数据的问题
你已经通过withFetchSource(true)开启了返回更新后源数据的配置,但需要从Spring Data封装的UpdateResponse中获取原生Elasticsearch响应对象,才能调用getGetResult()方法拿到源数据。具体修改如下:
UpdateQuery updateQuery = UpdateQuery.builder(esId) .withFetchSource(true) .withScript(updateScript) .build(); // Spring Data封装的UpdateResponse org.springframework.data.elasticsearch.core.UpdateResponse updateResponse = elasticsearchTemplate.update(updateQuery, IndexCoordinates.of(indexName)); // 获取Elasticsearch原生的UpdateResponse对象 org.elasticsearch.action.update.UpdateResponse nativeResponse = updateResponse.getResponse(); GetResult result = nativeResponse.getGetResult(); if (result.isExists()) { String sourceAsString = result.sourceAsString(); Map<String, Object> sourceAsMap = result.sourceAsMap(); byte[] sourceAsBytes = result.source(); // 这里添加你的后续业务逻辑 }
关键注意点
- 必须保留
withFetchSource(true):这是Elasticsearch返回更新后源数据的前提,若省略此配置,GetResult将为空。 - 版本兼容性:确保Spring Data Elasticsearch的版本与Elasticsearch服务器版本匹配,避免因API差异导致方法不可用。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

