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

如何使用spring-data-elasticsearch API获取Elasticsearch文档的_version当前值

如何使用Spring Data Elasticsearch API获取Elasticsearch文档_version字段值

方法1:实体类注解自动映射

直接在你的ES文档实体类上添加Spring通用的@Version注解,Spring Data Elasticsearch会自动将该字段和ES原生的_version元字段绑定,查询、新增、更新操作后都会自动填充对应的值。

实体类示例代码:

import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Version;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Document(indexName = "foos")
public class FooDocument {
    @Id
    private String id;
    
    // 自动映射ES的`_version`元字段
    @Version
    private Long version;
    
    @Field(type = FieldType.Text)
    private String yourBusinessField;

    // 省略getter、setter方法
}

使用示例:

// 按ID查询后直接从实体获取版本号
Optional<FooDocument> docOpt = fooRepository.findById("FQOO93sBMpiRC0Jqlyn8");
if (docOpt.isPresent()) {
    Long currentVersion = docOpt.get().getVersion();
}

// 新增/更新操作后,返回的实体直接携带最新版本号
FooDocument savedDoc = fooRepository.save(new FooDocument());
Long newVersion = savedDoc.getVersion();

方法2:通过ElasticsearchOperations直接从查询结果元数据获取

如果不想在实体类额外加version字段,可以直接从SearchHit对象中读取元数据中的版本值:

import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.query.GetQuery;
import javax.annotation.Resource;

public class EsVersionService {
    @Resource
    private ElasticsearchOperations elasticsearchOperations;

    public Long getDocVersion(String indexName, String docId) {
        GetQuery getQuery = GetQuery.builder().id(docId).build();
        SearchHit<FooDocument> hit = elasticsearchOperations.getOne(getQuery, FooDocument.class);
        return hit != null ? hit.getVersion() : null;
    }
}

注意事项

  • @Version注解属于Spring Data通用组件,包路径为org.springframework.data.annotation.Version,不要导错包
  • 如果你同时开启了乐观锁功能,更新时传入的version和ES当前存储的version不一致时会抛出乐观锁异常,此时可重新查询获取最新的version值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:24:01