如何在Elasticsearch中保留文档最近2个版本并查询历史版本
在Elasticsearch中获取文档的历史版本
当然可以在同一个索引中获取文档的上一版本,不过需要先配置索引的版本保留策略,再通过指定版本号的API查询。
步骤1:配置索引保留历史版本
Elasticsearch通过**软删除(soft deletes)**机制保留文档的历史版本,你需要确保索引配置了足够的保留操作数,以保存最近2个版本。
如果是新建索引,创建时可以指定以下设置:
PUT /products { "settings": { "index.soft_deletes.enabled": true, // 默认已开启,显式声明更稳妥 "index.soft_deletes.retention.operations": 2 // 保留最近2次操作的版本 }, "mappings": { "properties": { "name": { "type": "text" }, "price": { "type": "integer" } } } }
如果索引已存在,可通过更新设置API调整:
PUT /products/_settings { "index.soft_deletes.retention.operations": 2 }
步骤2:获取指定版本的文档
每次创建或更新文档时,Elasticsearch会自动递增文档的_version字段:
- 首次创建
product123时,文档的_version为1(对应价格10) - 更新后,
_version变为2(对应价格12)
你可以通过_get API指定version参数,直接获取对应版本的文档:
GET /products/_doc/product123?version=1
执行这个请求后,就能得到价格为10的上一版本文档内容。
注意事项
- 如果索引未开启软删除,或者保留的操作数小于需要的版本数,历史版本会被Elasticsearch自动清理,无法查询。
- 版本号是严格递增的,每次更新(包括覆盖式PUT)都会让版本号+1,所以要确保你知道目标版本的具体数值。
内容的提问来源于stack exchange,提问作者Sneha Mule
相关产品推荐
相关产品推荐

