--- title: "Elasticsearch 6/7/8 到 Easysearch 2.x 迁移指南" date: 2026-05-06 lastmod: 2026-05-06 description: "一文讲清楚 Easysearch 2.x 对 ES 6/7/8 的迁移路径:哪些版本可直接快照恢复,哪些需要脚本迁移,以及如何把风险降到最低。" tags: ["Easysearch", "Elasticsearch", "迁移", "快照", "snapshot", "向量"] summary: "最近在协助客户进行 Elasticsearch 到 Easysearch 的迁移时,发现大家最关心的问题是"当前版本能否直接使用快照迁移"。这个问题看似简单,但不同版本的答案差异较大。本文将基于实际测试经验,梳理各版本的迁移路径和注意事项。 迁移路径速览 # 根据源 ES 版本,可以直接对照下表选择迁移方案: 源 ES 版本 能否直接快照恢复 推荐方案 实施复杂度 ES 6.x 否 INFINI Gateway 迁移 或 ES 7.10.x 中转 较低 ES 7.0 - 7.11 是 直接快照恢复 较低 ES 7.12 - 7.17 否 INFINI Gateway 迁移 较低 ES 8.x 否 INFINI Gateway 迁移 较低 结论:ES 7.0-7.11 是迁移最顺畅的版本窗口,可直接快照恢复;其他版本也有成熟的迁移方案,只是路径不同。" --- 最近在协助客户进行 Elasticsearch 到 Easysearch 的迁移时,发现大家最关心的问题是"当前版本能否直接使用快照迁移"。这个问题看似简单,但不同版本的答案差异较大。本文将基于实际测试经验,梳理各版本的迁移路径和注意事项。 ## 迁移路径速览 根据源 ES 版本,可以直接对照下表选择迁移方案: | 源 ES 版本 | 能否直接快照恢复 | 推荐方案 | 实施复杂度 | |-----------|:---------------:|--------|:---------:| | ES 6.x | 否 | INFINI Gateway 迁移 或 ES 7.10.x 中转 | 较低 | | ES 7.0 - 7.11 | 是 | 直接快照恢复 | 较低 | | ES 7.12 - 7.17 | 否 | INFINI Gateway 迁移 | 较低 | | ES 8.x | 否 | INFINI Gateway 迁移 | 较低 | **结论**:ES 7.0-7.11 是迁移最顺畅的版本窗口,可直接快照恢复;其他版本也有成熟的迁移方案,只是路径不同。 --- ## 版本差异的原因 迁移路径的差异主要源于两方面:Lucene 版本兼容性和快照元数据格式变化。 **Lucene 兼容性**:Easysearch 2.x 底层要求的最低 Lucene 版本对应 ES 7.0.0。ES 6.x 的索引文件使用老版本 Lucene,直接恢复会报错: ``` The index was created with version [6.8.23] but the minimum compatible version is [7.0.0]. ``` **快照元数据格式**:ES 7.12 开始在快照中引入 `uuid`、`cluster_id` 字段,7.14 增加 `writer_uuid`,8.x 又引入 `transport_version`。这些字段与 Easysearch 2.x 的快照解析器不兼容。 因此,ES 7.0-7.11 成为迁移的"黄金窗口"——既满足 Lucene 兼容性要求,快照格式又足够简洁。 --- ## ES 7.0-7.11:直接快照恢复 这是测试最充分的迁移路径,已验证版本包括 ES 7.0.1、7.8.1、7.10.2 OSS、7.11.2。 **已验证能力:** - 单索引 / 多索引 / 通配符批量恢复 - 常见字段类型与别名 - 自定义 settings、多分片索引 - ILM 托管索引、数据流后备索引、冻结索引 **操作步骤:** ```bash # 1. 源 ES 创建快照 PUT /_snapshot/my_backup/snapshot_1 { "indices": "索引列表", "include_global_state": false } # 2. Easysearch 注册同一快照仓库 PUT /_snapshot/my_backup { "type": "fs", "settings": { "location": "/path/to/snapshot/repo", "readonly": true } } # 3. 恢复快照 POST /_snapshot/my_backup/snapshot_1/_restore { "indices": "索引列表", "include_global_state": false } ``` --- ## ES 6.x:Gateway 迁移或中转方案 ES 6.x 无法直接快照恢复到 Easysearch 2.x,有两种迁移方案可选: **方案一:INFINI Gateway 迁移(推荐)** 直接使用 Gateway 从 ES 6.x 迁移数据到 Easysearch,无需中转集群。Gateway 已验证支持 ES 6.8.x 的数据迁移。 **方案二:ES 7.10.x 中转** ``` ES 6.8 -> 快照 -> ES 7.10.x -> 快照 -> Easysearch 2.x ``` ES 7.10.x 可以正常恢复 ES 6.x 的快照,恢复完成后再创建快照供 Easysearch 使用。该方案数据完整性有保障,但需要额外的中转存储和迁移窗口。 **ES 6.x 特有字段**:ES 6.x 的 `string` 类型在 Easysearch 中需映射为 `text` 或 `keyword`(根据实际使用场景选择)。 --- ## ES 7.12+ 和 8.x:INFINI Gateway 迁移 这两个版本段的快照格式与 Easysearch 2.x 不兼容,推荐使用 INFINI Gateway 进行迁移。Gateway 是 INFINI Labs 提供的数据迁移工具,专门针对 Elasticsearch 到 Easysearch 的迁移场景进行了优化。 ### 架构示意 ``` ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Elasticsearch │ ──── │ INFINI Gateway │ ──── │ Easysearch │ │ (源集群) │ │ (迁移工具) │ │ (目标集群) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ ``` Gateway 内部通过 Scroll API 从源集群分批拉取数据,再通过 Bulk API 写入目标集群,整个过程对业务透明。 ### 主要优势 - **配置简单**:只需配置源集群和目标集群地址、索引名称即可 - **断点续传**:支持从断点恢复,避免网络抖动导致重头再来 - **进度可视**:实时显示迁移进度和速率 - **多索引并行**:支持同时迁移多个索引 ### 基本步骤 1. 在目标集群创建索引的 mapping 和 setting 2. 准备 Gateway 配置文件,填写源集群和目标集群连接信息 3. 运行 Gateway 执行迁移 4. 迁移完成后进行数据校验 详细的配置说明和操作示例,可参考 [ES 数据迁移之 INFINI Gateway](/blog/2025/data-migration-using-infini-gateway/)。 ### 备选方案 如果需要更灵活的控制,也可以自行编写脚本,通过 Scroll API 读取源数据、Bulk API 写入目标。这种方式适合有定制化需求的场景,但需要自行处理断点续传、错误重试等逻辑。 --- ## 字段类型兼容性 **直接兼容类型**:`text`、`keyword`、`long`、`double`、`boolean`、`date`、`object`、`nested`、`geo_point`、`geo_shape`、`ip`、`completion`、`wildcard`、`flattened`、`alias`、`join`、`rank_feature`、`rank_features`、`integer_range`、`long_range`、`date_range`、`match_only_text` 等。 **ES 7.x / 8.x 需替换类型**: | ES 类型 | Easysearch 替代方案 | 数据保留 | 说明 | |---------|---------------------|:--------:|------| | `dense_vector` | `knn_dense_float_vector` | 是 | 需安装 knn 插件,向量数据格式兼容 | | `knn_vector` | `knn_dense_float_vector` | 是 | 需安装 knn 插件 | | `sparse_vector` | `knn_sparse_bool_vector` | 是 | 需安装 knn 插件 | | `constant_keyword` | `keyword` | 是 | 需手动维护常量值 | | `runtime` | 移除或转为普通字段 | 是 | Easysearch 不支持运行时字段 | | `histogram` | `object` | 是 | 聚合 histogram 功能丢失 | | `aggregate_metric_double` | `object` | 是 | 需手动计算聚合 | | `unsigned_long` | `long` 或 `keyword` | 是 | 注意数值范围 | | `semantic` | 暂不支持 | - | ES 专有 AI 功能 | **向量迁移要点**:ES 的 `dense_vector` 数据可直接迁移到 Easysearch 的 `knn_dense_float_vector`,数据格式 `[0.1, 0.2, ...]` 完全兼容。需预先在目标索引创建正确的 mapping。 建议迁移前先用小索引测试,确认 mapping 无问题后再全量迁移。 --- ## 常见问题与避坑指南 ### 1. `include_global_state` 参数设置 该参数控制是否恢复集群级配置(模板、ILM 策略等)。不同版本的情况: | ES 版本 | 发行版 | global_state | 说明 | |---------|--------|--------------|------| | 7.0-7.7 | 任意 | 兼容 | 无 `_index_template` API | | 7.8-7.10 | OSS | 兼容 | 无内置 `_index_template` | | 7.8-7.10 | default | 可能不兼容 | 取决于是否使用 `_index_template` | | 7.11+ | 任意 | 不兼容 | 有 9 个内置 `_index_template` | **建议**:迁移时统一使用 `include_global_state=false`,先恢复数据再重建配置。 ### 2. ILM 和 data stream 迁移 - **ILM**:索引的 lifecycle 设置保留,但 policy 需在 Easysearch 中重建 - **数据流 (data stream)**:后备索引 (backing index) 数据完整恢复,语义需在目标侧重建 - **冻结索引 (frozen index)**:自动恢复为普通可访问状态 ### 3. 迁移验收标准 建议至少完成三项验证: - 文档量一致 - 关键查询结果一致 - 核心业务链路压测通过 ### 4. 迁移窗口规划 - 快照方案通常需要短停机窗口完成切换 - Gateway 迁移可实现近实时同步,仅在切换连接时短暂停服 --- ## 快照格式变化参考 | 字段 | ES 7.0-7.11 | ES 7.12-7.17 | ES 8.x | Easysearch 2.x | |------|:-----------:|:------------:|:------:|:--------------:| | `min_version` | 7.9.0 或无 | 7.12.0 | 7.12.0 | 支持 | | `uuid`(仓库级) | 无 | 有 | 有 | 不支持 | | `cluster_id` | 无 | 有 | 有 | 不支持 | | `writer_uuid` | 无 | 有(7.14+) | 有 | 不支持 | | `transport_version` | 无 | 无 | 有 | 不支持 | --- ## 总结 本文梳理了 Easysearch 2.x 对 ES 6/7/8 的迁移路径: - **ES 7.0-7.11**:直接快照恢复,路径最短 - **ES 6.x**:INFINI Gateway 迁移 或 ES 7.10.x 中转 - **ES 7.12+ / 8.x**:使用 INFINI Gateway 迁移 建议在正式迁移前,先选择非核心索引进行小规模验证,确认数据完整性和业务兼容性后再扩大迁移范围。 如有迁移相关问题,欢迎联系我们。