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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:15:40