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