自适应索引 · 查询与维护
Quiver 中围绕召回目标的搜索与基于实测成本的分区维护。
解决什么问题
Quiver 是动态近似最近邻索引,底层为 C++,Python 接口使用 PyTorch Tensor,支持搜索、插入、删除、维护与保存加载。研究问题是如何让搜索投入和分区布局适应不同查询及数据变化。
工作基于 Jason Mohoney / Marius 的上游 Quiver 系统展开。个人研究与实现不意味着底层所有索引思想均由 Champ 独立提出。
本节依据
README.md
自适应搜索
固定 nprobe 为每个查询指定预设分区预算;自适应搜索则把在线估计与请求的召回目标比较,调整继续扫描的范围,让不同难度的查询获得不同搜索投入。
召回目标是估计或平均意义上的目标,不是逐查询保证。参数校验和路径兼容性同样重要:某条搜索路径支持的优化,不代表串行、worker、批处理模式都会自动启用。
本节依据
src/cpp/src/query_coordinator.cpp
在线维护
维护先积累完整观察窗口,再结合分区大小、实际命中率和实测扫描成本。它根据成本模型执行拆分、删除、重分配与细化,而非只凭分区大小作决定。
查询循环控制当前请求的搜索投入,维护循环改变后续请求使用的数据布局。两条反馈路径相关但不同,评价其中一条的改进时还需考虑更新与维护开销。
本节依据
src/cpp/src/maintenance_policies.cppsrc/cpp/include/maintenance_policies.h
实现与选项
当前构建使用 C++20、Python、PyTorch、Faiss 与 pybind11。核心接口采用 CPU float32 向量和唯一非负 int64 ID,支持 L2 与内积搜索,-1 保留作填充值。
RaBitQ、扫描过滤、离线预算模型和质心图是需显式启用并受路径约束的选项。编码 RaBitQ 路径限制在兼容的串行 L2 搜索中;质心图就绪状态绑定源数据变更版本,过期后需要重建。
本节依据
CMakeLists.txtsrc/cpp/src/query_coordinator.cppsrc/cpp/src/quiver_index.cpp
归属与边界
当前仓库私有,所读本地版本无法从远端获取。本地忽略的研究文件不构成公开评测证据,这份资料不新增加速比或召回结果。
库本身不提供向量属性过滤或多节点服务。支持动态更新不能被理解为任意并发修改都安全,平均召回目标也不是每条查询的准确率保证。
本节依据
README.mdLICENSE