📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

升级 Easysearch 索引中的 Lucene 段到当前版本。在升级 Easysearch 版本后,旧索引可能包含旧版本的 Lucene 段,需要升级以确保兼容性和性能。

API 格式 #

POST /_upgrade
POST /{index}/_upgrade

API 作用 #

该 API 用于将索引中的 Lucene 段升级到当前版本。升级过程会重写 Lucene 段,使其与当前版本兼容。

API 参数 #

路径参数 #

参数类型是否必填默认值描述
{index}String-逗号分隔的索引名称列表。如未指定,则升级所有索引

查询参数 #

参数类型是否必填默认值描述
only_ancient_segmentsBooleanfalse是否只升级旧版本(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"
    }
  }
}

响应字段说明 #

字段类型描述
acknowledgedBoolean升级请求是否被确认
total_shardsInteger处理的分片总数
successful_shardsInteger成功升级的分片数量
failed_shardsInteger升级失败的分片数量
upgraded_indicesObject包含每个已升级索引信息的对象
upgraded_indices.{index_name}.upgrade_versionString执行升级的 Easysearch 版本
upgraded_indices.{index_name}.oldest_lucene_segment_versionString升级后最旧的 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 监控升级进度