一次 RAG 底座升级:我们如何把 Elasticsearch 从 7.x 平滑迁移到 8.x
Elasticsearch 从 7.x 迁移到 8.x
在大模型应用落地过程中,检索系统的稳定性往往决定了最终体验。 最近我们将两个 RAG 项目合并,决定统一升级到 Elasticsearch 8.x。
一、迁移背景
部门内部以前有两个AI项目,都用到了RAG技术,最近领导打算将两个项目的知识检索部分进行合并作为一个公共的RAG底座。旧项目均使用Elasticsearch 7.x 作为向量数据库,现在决定新项目使用Elasticsearch 8.x 。要求RAG 检索能力不能中断,迁移后召回质量需保持稳定。因为一些原因,不太方便使用官方升级路线。而且数据量大,不能依赖人工重建索引+手工导入,最终方案是编写一个迁移脚本,完成:
- 索引结构迁移(mapping/settings)
- 向量字段自动适配
- 文档批量迁移
- 迁移报告输出
二、面临的问题:向量字段不兼容
旧版本中的向量字段定义,与 8.x 推荐的 dense_vector 方案存在差异。如果不先处理字段兼容,后续建索引、写数据、做召回都会出现连锁问题。
我们的做法是把“字段升级”前置到迁移脚本里: 迁移 mapping 时自动完成向量字段转换,并移除不再兼容的历史参数。
Mapping 定义对比示例:
- X的定义:
{
"properties": {
"my_vector": {
"type": "dense_vector",
"dims": 768
}
}
}
8.X的定义
{
"properties": {
"my_vector": {
"type": "dense_vector",
"dims": 768,
"element_type": "float",
"index": true,
"similarity": "cosine",
"index_options": {
"type": "int4_hnsw",
"m": 16,
"ef_construction": 100
}
}
}
}
三、我们怎么实现的
整个迁移分为四步:
- 连接双集群(源 7.x、目标 8.x)
- 同步索引结构并完成兼容改造
- 通过滚动读取 + 批量写入迁移文档
- 自动输出迁移报告,沉淀可追踪结果
四、如何快速复用这套方案?
1.下载代码
https://github.com/WordLin/ElasticSearchData7_8
2.安装依赖
pip install -r requirements.txt
环境要求
* Python 3.9+
* 可访问的 Elasticsearch 7.x 源集群
* 可访问的 Elasticsearch 8.x 目标集群
3.配置源/目标集群与待迁移索引规则
migration_config:
source:
hosts: ["http://127.0.0.1:9200"]
username: "elastic"
password: "source_password"
verify_certs: false
target:
hosts: ["https://127.0.0.1:9201"]
username: "elastic"
password: "target_password"
verify_certs: false
ca_certs: null
migration:
batch_size: 500
scroll_time: "5m"
concurrent_workers: 1
indices:
# 指定具体索引(非空时,仅迁移这里列出的索引)
specific_indices: []
# 当 specific_indices 为空时生效:索引名包含任一字符串即匹配
include_patterns: ["rag", "kb"]
# 排除规则:索引名包含任一字符串即排除
exclude_patterns: [".kibana", ".security"]
程序逻辑如下:
- 自动跳过以
.开头的系统索引 - 如果
specific_indices非空:只迁移该列表中的索引 - 如果
specific_indices为空:按include_patterns与exclude_patterns过滤
5.操作步骤
1. 先小范围验证
先在 specific_indices 中只配置 1~2 个测试索引,确认迁移和查询结果正常后再全量执行。
2. 执行迁移
python main.py
执行后流程为:
- 连接源/目标集群
- 获取并过滤索引
- 迁移索引结构(mapping/settings)
- 分批迁移文档数据
- 输出迁移报告
3. 查看迁移报告
运行结束后,项目目录会生成:
migration_report_YYYYMMDD_HHMMSS.json
报告包含:
- 总索引数
- 总文档数 / 成功数 / 失败数
- 成功率
- 各索引的迁移状态与耗时
报告会输出总文档量、成功率、索引级状态和耗时,便于团队验收与复盘。
五、迁移价值
这次升级带来的不是单点优化,而是底座能力增强:
- 检索架构版本统一,后续迭代更轻量
- 向量能力配置更规范,便于持续优化召回
- 数据迁移过程可观测、可审计,降低上线风险
六、最后的建议
- 先跑通向量字段兼容,再谈全量迁移
- 小规模验证先行,逐步扩大迁移范围
- 用报告驱动验收,不靠“感觉迁完了”
参考文档:
7.x版本到8.15版本的变化史
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)