首页/数据/NoSQL 速查/向量检索方案对照与选型
选型与架构50 条

向量检索方案对照与选型

向量检索按现有栈与规模选:已有 PostgreSQL 用 pgvector 增加向量列;已有 ES 用 dense_vector 做混合检索;MongoDB 的向量能力主要随 Atlas 提供;独立大规模场景评估 Milvus/Qdrant 等专用库。关键是过滤条件、召回率与运维成本的平衡。

NoSQL 速查数据更新于 2026-10-13

向量检索怎么选方案

向量检索的选型基本由两件事决定:现有技术栈与数据规模。已有 Postgres 就用 pgvector 加一列向量,能复用事务、SQL 与现成的过滤条件;已有 Elasticsearch 则用 dense_vector 做向量与全文的混合检索;MongoDB 的向量能力主要随 Atlas 提供;数据规模与索引种类要求更高时,再考虑 Milvus 这类专用向量库,代价是多一套组件与同步链路。无论哪种,都要把过滤条件、召回率与运维成本放在一起权衡。

pgvector 示例

pgvector 示例
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE items (id bigserial PRIMARY KEY, name text, embedding vector(768));  -- 维度需与模型输出一致

-- HNSW 索引:适合在线查询,建索引比 ivfflat 慢但查询更稳
CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops);   -- 距离函数要与查询运算符匹配

-- 余弦距离近邻查询(<=> 为余弦距离运算符)
SELECT id, name FROM items
ORDER BY embedding <=> '[0.10, 0.22, 0.31]'
LIMIT 10;

-- 带结构化过滤:先按业务条件收窄,再走向量排序
SELECT id, name FROM items
WHERE category = 'guide'
ORDER BY embedding <=> '[0.10, 0.22, 0.31]' LIMIT 10;

方案对照

方案优势注意点
pgvector复用 Postgres 事务与 SQL,可与结构化条件组合数据量大时要调 HNSW 参数与内存,注意索引构建耗时
ES dense_vector向量与全文混合排序,过滤能力丰富向量字段内存与堆开销高,维度与算子要先规划
MongoDB Atlas Vector Search与文档数据同库,减少一条同步链路自建部署需核对版本与组件支持范围
专用向量库(Milvus 等)面向大规模向量调优,索引类型多多一套组件、监控与数据同步链路

典型使用场景

  • RAG 检索:把文档切块后生成向量,按语义召回候选片段
  • 以图搜图或商品相似推荐:相似度作为召回一环,再叠加业务排序
  • 日志与工单聚类:向量召回加标签过滤,快速找相似历史问题
  • 混合检索:关键词召回与向量召回合并后再重排,提升准确率
  • 敏感内容匹配:向量近邻找出与样本高度相似的存量数据

基本信息

索引结构HNSW(在线查询常用)与 IVF 系列(构建快、需调聚类数)
距离函数余弦、欧氏、内积三种,必须与建索引时的算子类一致
过滤策略前过滤(先筛再算)与后过滤(先算再筛),结果数量与延迟表现不同
维度约束向量维度由嵌入模型决定,建表后通常无法直接改
评测指标recall@k 衡量召回质量,需用标注集评测而非凭感觉
向量只是召回的一环:RAG 类场景还要设计切块策略、权限与时间过滤、重排与召回率评测。先用小规模标注集验证效果,再扩容量与调索引参数。
距离函数必须与索引算子类一致:用余弦距离查询却按内积建索引,结果排序会完全不符合预期且不报错。
向量索引的内存占用随数据量线性增长:只在小表上测速度会严重低估容量需求,扩容前按全量数据与索引参数估算内存。

易错点

  • 距离函数与索引算子类不匹配:查询能跑通但排序结果没有意义,问题隐蔽且难以第一时间发现
  • 只在小表或空表上压测:索引全驻内存时表现很好,数据量上来后延迟与内存占用都会改变量级
  • 向量与元数据分两个系统存储:同步失败时出现「有向量但过滤不到」的孤立记录,检索结果与业务状态不一致
  • 把相似度当成精确匹配使用:向量检索是近似近邻,召回率受索引参数影响,关键业务要留兜底的关键词或规则检索

数据来源与参考

  • pgvector README(GitHub pgvector/pgvector)
  • Elasticsearch Guide: k-nearest neighbor search
  • MongoDB Docs: Atlas Vector Search
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌