
类型:向量数据库
简介:存储、索引和管理由深度神经网络和机器学习(ML)模型生成的大规模嵌入向量。
本文介绍 Milvus 向量数据导入流程,包括原始文档清洗、文本切分、Embedding 生成、字段整理、批量写入和导入后的检索验证。
一、导入前先处理原始文档
向量检索效果好不好,不能只看 Milvus,也要看进入 Milvus 的数据是否干净。如果原始文档里有大量页眉、页脚、目录、重复声明、乱码和无意义空行,生成的向量也会受到影响。
导入 Milvus 前,建议先做文档清洗。常见清洗内容包括:
- 删除重复页眉页脚;
- 删除目录中没有实际内容的条目;
- 合并被错误换行拆开的句子;
- 去掉无意义符号和乱码;
- 保留标题、章节和来源信息。
这一步看起来简单,但非常关键。很多知识库检索结果不准,并不是 Milvus 没配好,而是文档切分和清洗质量不够。
二、文本切分不要只按字数
文本不能整篇直接生成一个向量。太长的文本会降低检索精度,也不利于命中具体答案。更常见的做法是把文档切成多个片段,每个片段生成一个 Embedding,再写入 Milvus。
1、按语义段落切分
优先按标题、小节、段落和列表切分,而不是机械地每隔固定字数切一刀。比如一个 FAQ 问题和答案应尽量放在同一个片段里,不要把问题放在上一段、答案切到下一段。
2、控制片段长度
片段太短,语义不完整;片段太长,检索命中不精准。实际长度要结合模型上下文、业务内容和检索效果测试。知识库场景可以先用中等长度片段测试,再根据命中效果调整。
3、保留上下文信息
每个片段都应保留来源字段,例如:
- 文档标题;
- 文件名;
- 章节名;
- 页码;
- URL;
- 版本号。
这些信息对后续展示来源、排查错误和更新数据都很重要。
三、生成 Embedding 时要记录模型信息
Embedding 是把文本转换成向量的过程。导入 Milvus 时,向量维度必须和 Collection 中定义的向量字段一致。
1、记录模型名称和维度
每次生成向量时,都建议记录:
- 使用的 Embedding 模型;
- 输出向量维度;
- 是否做过归一化;
- 生成时间;
- 代码版本。
如果后续更换模型,旧数据和新数据最好不要混在同一个 Collection 中直接使用,除非确认向量空间兼容。
2、保持入库和查询模型一致
入库时用什么模型生成向量,查询时也应使用同一模型或兼容模型生成查询向量。否则搜索结果可能明显偏离预期。
3、不要忽略失败记录
批量生成 Embedding 时,可能会出现个别文本为空、超长、格式异常或请求失败。建议保留失败记录,后续单独处理,不要简单跳过。
四、批量写入 Milvus 的操作顺序
Milvus 官方文档提供了 insert、upsert、delete 等数据操作能力。导入数据时,应确保每条记录符合 Collection Schema。
1、先整理字段
每条数据至少要包含:
- 主键或可追踪编号;
- 文本片段;
- 来源信息;
- 向量字段;
- 版本或状态字段。
字段名、类型和长度要和 Collection Schema 保持一致。
2、小批量开始写入
不要第一次就写入几十万条数据。建议先写入 10 条,再写入 100 条,确认没有问题后再扩大批次。
这样做的好处是:
- 快速发现字段错误;
- 快速发现维度错误;
- 避免重复写入大量脏数据;
- 方便定位失败批次。
3、记录导入日志
导入日志至少包含:
- 原始文件名;
- 切分片段数量;
- 成功写入数量;
- 失败数量;
- Embedding 模型;
- 写入时间;
- Collection 名称。
这份日志后续做删除、回滚、迁移时非常有用。
五、导入后必须做检索验证
数据写入成功只是第一步。真正要验证的是:用户搜索时能不能找到正确内容。
1、用原文问题测试
从文档里找几个明确问题,转换成查询向量后搜索,看结果是否能命中对应片段。
2、用同义问题测试
不要只测试原文中的句子。比如文档写的是“退款流程”,用户可能会问“怎么退钱”“售后退款怎么处理”。同义表达更能反映实际使用效果。
3、用无答案问题测试
故意问一些资料中没有的问题,观察系统是否返回明显不相关内容。如果无答案问题也总能返回看似相关的片段,就要在后续应用层增加置信度判断或无答案处理。
六、导入失败时怎么排查
1、批量写入超时
先缩小单批数量,再检查 Milvus 服务负载、网络连接和客户端超时时间。不要直接无限重试同一批数据。
2、字段类型不匹配
检查写入数据字段是否和 Schema 一致。常见问题包括文本字段过长、主键类型错误、向量字段维度错误。
3、检索结果不准
先不要急着调索引。优先检查文本切分、Embedding 模型、查询模型和原始数据清洗质量。
FAQ
Q1:文本切分越短越好吗?
A:不是。太短会丢失上下文,太长会降低命中精度,需要结合业务测试。
Q2:导入时可以不保存原文吗?
A:不建议。只保存向量会影响结果展示、来源追踪和后续重建。
Q3:批量导入失败后能直接重跑吗?
A:要先确认是否已经部分写入,避免重复数据。建议保留批次日志,再按失败批次处理。

