一次 RAG 底座升级:我们如何把 Elasticsearch 从 7.x 平滑迁移到 8.x
Elasticsearch 从 7.x 迁移到 8.x一、迁移背景二、面临的问题向量字段不兼容三、我们怎么实现的四、如何快速复用这套方案1.下载代码2.安装依赖3.配置源/目标集群与待迁移索引规则5.操作步骤1. 先小范围验证2. 执行迁移3. 查看迁移报告五、迁移价值六、最后的建议在大模型应用落地过程中检索系统的稳定性往往决定了最终体验。 最近我们将两个 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_82.安装依赖pipinstall-rrequirements.txt环境要求* Python 3.9* 可访问的 Elasticsearch 7.x 源集群* 可访问的 Elasticsearch 8.x 目标集群3.配置源/目标集群与待迁移索引规则migration_config:source:hosts:[http://127.0.0.1:9200]username:elasticpassword:source_passwordverify_certs:falsetarget:hosts:[https://127.0.0.1:9201]username:elasticpassword:target_passwordverify_certs:falseca_certs:nullmigration:batch_size:500scroll_time:5mconcurrent_workers:1indices:# 指定具体索引非空时仅迁移这里列出的索引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版本的变化史