外观
pgvector 与其他向量检索方案
核心答案:先看数据、过滤和运维约束,再选存储。 pgvector 是 PostgreSQL 扩展;FAISS 主要是相似度搜索库;Qdrant 是独立向量数据库服务。它们的产品边界不同,不能只比较一个检索耗时数字。
选型表
| 方案 | 适合评估的情形 | 必须考虑的额外责任 |
|---|---|---|
| PostgreSQL + pgvector | 已有关系数据、需要 SQL 与事务关联 | 数据库资源竞争、索引与过滤调优 |
| FAISS | 本地实验、嵌入应用、算法或批处理研究 | 元数据、并发服务、版本和持久化体系 |
| Qdrant | 向量检索作为独立服务,需专用向量能力 | 另一套服务的备份、权限与数据同步 |
| 托管检索服务 | 希望降低基础运维负担 | 费用、数据边界、接口与迁移成本 |
FAISS 官方仓库定位为向量相似度检索与聚类库;Qdrant 文档展示其过滤能力。这里不做未经本项目数据验证的性能排名。
最小例子:精确搜索作为基线
python
vectors = {"a": (1, 0), "b": (0, 1), "c": (0.8, 0.2)}
q = (1, 0)
def squared_l2(v):
return sum((x - y) ** 2 for x, y in zip(q, v))
ranked = sorted(vectors, key=lambda k: squared_l2(vectors[k]))
assert ranked == ["a", "c", "b"]这是穷举距离的独立示例。近似索引降低搜索工作量时,需要与精确结果比较召回率,而非把“更快”自动当成“更好”。同一实验还要固定数据、维度、查询集、过滤条件与硬件。
本项目选择 pgvector 的原因
教材、资料版本、审核记录和任务状态本来就需要 PostgreSQL。将片段元数据与向量放在一起,有利于来源追踪、版本筛选与教学等级过滤,也减少一个独立服务。小数据首先使用精确查询更容易解释与验证;规模增长后再测 HNSW 或 IVFFlat。
注意近似索引与过滤组合可能返回不足 k 条。pgvector 的迭代扫描等能力可以改善这一问题,但依赖扩展版本和配置;并非“加了索引就无需调优”。此外,SQL 同库并不表示所有图状态与外部调用天然拥有共同事务。参见系统架构。
自测与排障
在三条示例数据中新增地区字段,先筛选再计算精确结果。然后解释近似候选先被截断、再被过滤时为什么可能不足 k。验收是能提出精确对照与索引执行计划检查,而非记住某种索引名称。
常见误区是用向量条数设定通用选型阈值。相同条数下,维度、过滤选择性、并发、更新频率和延迟目标都可能改变答案。
官方资料与版本边界
- pgvector 官方仓库:距离、索引与过滤;迭代扫描从 0.8.0 起提供。
- FAISS 官方仓库:库的能力边界。
- Qdrant Filtering:结构化过滤语义。
核验日期:2026-11-03。项目实际 PostgreSQL 与扩展版本以 Compose 和验收报告为准;本页没有宣称对其他方案完成压测。