升级 Easysearch 索引中的 Lucene 段到当前版本。在升级 Easysearch 版本后,旧索引可能包含旧版本的 Lucene 段,需要升级以确保兼容性和性能。
API 格式 #
POST /_upgrade
POST /{index}/_upgrade
API 作用 #
该 API 用于将索引中的 Lucene 段升级到当前版本。升级过程会重写 Lucene 段,使其与当前版本兼容。
API 参数 #
路径参数 #
| 参数 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
{index} | String | 否 | - | 逗号分隔的索引名称列表。如未指定,则升级所有索引 |
查询参数 #
| 参数 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
only_ancient_segments | Boolean | 否 | false | 是否只升级旧版本(ancient)的 Lucene 段。 - false(默认):升级所有段- true:仅升级来自旧版本 Lucene 的段 |
响应示例 #
{
"acknowledged": true,
"total_shards": 10,
"successful_shards": 10,
"failed_shards": 0,
"upgraded_indices": {
"my_index": {
"upgrade_version": "7.10.0",
"oldest_lucene_segment_version": "8.0.0"
},
"another_index": {
"upgrade_version": "7.10.0",
"oldest_lucene_segment_version": "8.0.0"
}
}
}
响应字段说明 #
| 字段 | 类型 | 描述 |
|---|---|---|
acknowledged | Boolean | 升级请求是否被确认 |
total_shards | Integer | 处理的分片总数 |
successful_shards | Integer | 成功升级的分片数量 |
failed_shards | Integer | 升级失败的分片数量 |
upgraded_indices | Object | 包含每个已升级索引信息的对象 |
upgraded_indices.{index_name}.upgrade_version | String | 执行升级的 Easysearch 版本 |
upgraded_indices.{index_name}.oldest_lucene_segment_version | String | 升级后最旧的 Lucene 段版本 |
执行要求 #
- 所有主分片必须可用:升级开始前,API 会检查所有主分片是否可用
- 无写阻塞:集群不能有全局或元数据写阻塞
- 如果任何主分片缺失,API 将抛出
PrimaryMissingActionException
升级过程 #
- 验证:检查所有主分片是否可用
- 分片级操作:在每个分片上单独执行升级
- 强制合并:对每个分片调用
forceMerge,参数包括:forceMerge(true):合并后强制刷新maxNumSegments = Integer.MAX_VALUE:合并段但不一定创建单个段expungeDeletes = false:不删除已删除的文档upgradeOnlyAncientSegments:根据请求参数决定是否只升级旧版本段
- 元数据更新:成功升级分片后,更新索引元数据中的版本信息
使用场景 #
- 升级 Easysearch 版本后,确保旧索引与当前版本兼容
- 优化使用旧 Lucene 版本创建的索引性能
- 确保所有索引使用当前 Lucene 版本以获得最佳性能和兼容性
注意事项 #
- 升级操作会消耗较多资源,建议在低峰期执行
- 升级过程中索引仍然可用,但性能可能受影响
- 升级大型索引可能需要较长时间
- 可以使用 GET /_upgrade API 监控升级进度





