向量索引重建是什么
重建索引指在换 embedding 模型、换距离度量、换索引算法或调整 schema 之后,重新生成全部向量与索引。工程上成熟的模式是旁路重建:新开一个集合或表,用同一份原始数据按新配置重新编码写入,构建完成并跑评测验证后,再用别名或路由把流量切过去,观察期稳定后再清理旧集合。关键要求是两个:切换点可回滚,重建期间产生的新增数据不能丢。
基本信息
| 触发场景 | 换 embedding 模型与维度、换度量、换索引算法或参数 |
|---|---|
| 切换手段 | 集合别名、配置中心改集合名、网关路由 |
| 数据一致性 | 重建期间双写,或按时间戳补差 |
| 验证方式 | 固定评测集对比 recall@k 与 MRR |
| 回滚方式 | 别名指回旧集合,或路由权重回退 |
| 窗口安排 | 全量重算耗时长,要预估并选择低峰期 |
典型使用场景
- embedding 模型升级:新查询向量与旧库向量不可比,只能全量重算
- 维度变化:从 1024 维降到 512 维以省存储与算力
- 把暴力检索换成 ANN 索引,或从 IVFFlat 换到 HNSW
- 索引参数调整后需要重建才对全量数据生效
- 分片或集群扩容后重新分布数据,均衡负载
别名切换思路
别名切换思路
# 方案一:应用侧配置切换(配置中心改集合名)
# 方案二:集合别名,读流量始终打别名
client.create_alias(collection_name="kb_v2", alias="kb") # 指向新集合
# 出问题时把别名指回旧集合即完成回滚
# 重建期间新数据双写或事后补差,避免增量丢失切换方式对照
| 方式 | 切换粒度 | 回滚成本 |
|---|---|---|
| 集合别名 | 秒级 | 指回旧集合即可,成本最低 |
| 配置中心改集合名 | 取决于发布流程 | 需再次配置并生效 |
| 网关按权重路由 | 可灰度 | 按比例回退,适合逐步放量 |
| 域名与 DNS | 受缓存 TTL 影响 | 回退慢,不作为首选 |
重建期间的新写入必须双写或事后补差,否则切换后这段时间的增量数据会永久缺失。
切换前抽样比对内容而不只是条数:payload 字段映射错误、引用信息丢失这类问题只有比对内容才能发现。