完整题目
针对知识库频繁更新的场景,请设计一个高效的增量式向量索引更新机制,要求支持实时或准实时更新,并保证检索质量。
本文目录
核心原则
增量索引要同时保证数据可恢复、查询视图一致和召回质量可验证。不同向量引擎对插入、更新和删除的支持不同,不能把复杂度或是否需要重建写成统一结论。
1. 写入与索引分层
- 先把文档、chunk、embedding 及版本写入主数据存储,并用 WAL 或消息队列传递变更。
- 消费端按文档版本和事件 ID 做幂等处理,把新向量写入 Delta 索引。插入成本、锁模型和可见延迟以具体引擎实现为准。
- 查询同时搜索稳定的 Base 索引和 Delta 索引,合并候选、按文档版本去重,再执行过滤和排序。
2. 修改与删除
- 若引擎原生支持可验证的 upsert 或 delete,可以直接使用并持续监控召回变化。
- 若物理删除会影响图连通性或实现不支持安全更新,则把修改表示为旧版本失效加新版本写入,把删除记录到精确的 tombstone bitmap 或集合中,后台再重建。
- Bloom Filter 可能产生假阳性,不适合在不能误删有效结果的场景中单独充当删除真值。
3. 影子索引与切换
当增量规模、删除比例、延迟或召回退化达到业务设定的触发条件时,在后台构建 Shadow 索引。构建完成后,用固定查询集和标注证据比较 Recall@K、NDCG、延迟、新数据可见性、删除泄漏率和结果差异;通过门禁后原子切换版本指针,失败则保留旧版本并回滚。触发条件必须由数据规模和 SLA 实测确定,不能固定写成 5% 或 10%。