跳至正文
Qingping Champ
← 所有资料手记PROJECT WIKI

自适应索引 · 查询与维护

Quiver 中围绕召回目标的搜索与基于实测成本的分区维护。

最近核验 5 个章节

解决什么问题

Quiver 是动态近似最近邻索引,底层为 C++,Python 接口使用 PyTorch Tensor,支持搜索、插入、删除、维护与保存加载。研究问题是如何让搜索投入和分区布局适应不同查询及数据变化。

工作基于 Jason Mohoney / Marius 的上游 Quiver 系统展开。个人研究与实现不意味着底层所有索引思想均由 Champ 独立提出。

本节依据
  • README.md

在线维护

维护先积累完整观察窗口,再结合分区大小、实际命中率和实测扫描成本。它根据成本模型执行拆分、删除、重分配与细化,而非只凭分区大小作决定。

查询循环控制当前请求的搜索投入,维护循环改变后续请求使用的数据布局。两条反馈路径相关但不同,评价其中一条的改进时还需考虑更新与维护开销。

项目示意分区维护反馈循环 · 示意图查看相关资料 ↗
图片载入中…

分区维护反馈循环 · 示意图

本节依据
  • src/cpp/src/maintenance_policies.cpp
  • src/cpp/include/maintenance_policies.h

实现与选项

当前构建使用 C++20、Python、PyTorch、Faiss 与 pybind11。核心接口采用 CPU float32 向量和唯一非负 int64 ID,支持 L2 与内积搜索,-1 保留作填充值。

RaBitQ、扫描过滤、离线预算模型和质心图是需显式启用并受路径约束的选项。编码 RaBitQ 路径限制在兼容的串行 L2 搜索中;质心图就绪状态绑定源数据变更版本,过期后需要重建。

本节依据
  • CMakeLists.txt
  • src/cpp/src/query_coordinator.cpp
  • src/cpp/src/quiver_index.cpp

归属与边界

当前仓库私有,所读本地版本无法从远端获取。本地忽略的研究文件不构成公开评测证据,这份资料不新增加速比或召回结果。

库本身不提供向量属性过滤或多节点服务。支持动态更新不能被理解为任意并发修改都安全,平均召回目标也不是每条查询的准确率保证。

本节依据
  • README.md
  • LICENSE
← 继续阅读其他手记