索引算法
PistaDB 提供 8 种可互换的索引算法。每个数据库只能激活一种索引;请根据规模、召回率目标和内存预算挑选。
| 索引 | 算法 | 适用场景 |
|---|---|---|
LINEAR | 暴力精确扫描 | 基准测试、小规模嵌入集 |
HNSW | 分层可导航小世界图 | RAG 首选 —— 速度与召回率最佳平衡 |
IVF | 倒排文件索引(k-means 聚类) | 有训练预算的大型知识库 |
IVF_PQ | IVF + 乘积量化 | 内存受限的部署环境 |
DISKANN | Vamana 图(DiskANN) | 十亿级向量集合 |
LSH | 局部敏感哈希 | 极低内存占用场景 |
SCANN | 各向异性向量量化(Google ScaNN) | MIPS / 余弦场景下的极致召回率 |
SQ | 标量量化(uint8) | 4 倍内存与存储压缩,无需训练 |
如何选择
┌─ 小于 1 万向量? ─────────────→ LINEAR(精确,零配置)
│
├─ 文本场景追求速度/召回率? ───→ HNSW
│
嵌入集合
│
├─ 内存受限? ─────────→ IVF_PQ 或 SQ
│
└─ 接近十亿级? ─────────→ DISKANNHNSW是 RAG 场景的默认推荐。根据召回率目标调整hnsw_M、hnsw_ef_construction、hnsw_ef_search(见示例)。IVF/IVF_PQ/SCANN需要训练。先在有代表性的样本上调用db.train()。SQ是最简单的内存优化:4× 压缩,召回率几乎无损,且无需训练步骤。
距离度量
所有索引都支持全部 5 种距离度量。文本嵌入(OpenAI、Cohere、BGE、GTE)用 COSINE;预归一化嵌入用 IP,在数学上等价但更快。
完整参考
包括 HNSW 调参、IVF 训练、SQ 内存压缩、ScaNN 两阶段搜索在内的完整示例,见仓库中的 docs/examples.md。
