pgvector、Milvus、Elasticsearch 做向量检索怎么选?

第 1205 题 约 2 分钟读完

本文目录
  1. 面试怎么回答
  2. 三类方案的特点
  3. 选型时看什么
  4. 我的建议

面试怎么回答

pgvector 的优点是和业务数据在一起,一条 SQL 能同时做向量检索、过滤和关联,复用 PostgreSQL 的事务和权限,缺点是上亿规模时扩展性有限。Milvus 这类专用向量库为向量设计,能分布式扩展到数十亿、索引类型丰富,但多一套系统、结构化查询能力弱。ES 全文检索成熟,混合检索方便,很多公司已有集群,但纯向量性能和资源效率通常不如专用库。我会看数据规模、是否需要混合检索、过滤条件复杂度、现有技术栈、更新频率、多租户和内存成本。起步用现有系统验证价值,用自己的数据压测召回、延迟、过滤和写入,并在应用层封装检索接口方便以后替换。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

做 RAG 时,向量存储的选择很多:在 PostgreSQL 里加 pgvector 扩展、用专门的向量数据库(Milvus、Qdrant、Weaviate 等)、用 Elasticsearch / OpenSearch 的向量检索,还有各种云服务。面试官问选型,想听的是你根据什么条件做取舍。

三类方案的特点

pgvector(关系数据库扩展)

  • 优点:和业务数据在一起,可以在一条 SQL 里同时做向量检索、条件过滤、关联查询;事务、备份、权限都复用 PostgreSQL;团队学习成本低;
  • 缺点:大规模(上亿向量)时,单机性能和扩展性有限;索引构建和内存占用需要关注。

专用向量数据库(以 Milvus 为例)

  • 优点:为向量检索设计,支持分布式扩展到数十亿规模;索引类型丰富(HNSW、IVF、DiskANN、GPU 索引);存算分离、多副本;
  • 缺点:多维护一套系统;复杂的结构化查询和关联能力不如关系数据库。

Elasticsearch / OpenSearch

  • 优点:全文检索(BM25)能力成熟,向量检索和关键词检索在同一个系统里,做混合检索很方便;很多公司已经有 ES 集群和运维经验;
  • 缺点:纯向量检索的性能和资源效率通常不如专用向量库;大规模向量下内存开销较大。

选型时看什么

  1. 数据规模:百万到千万级,pgvector 或 ES 通常够用;上亿到数十亿,考虑专用向量库;
  2. 是否需要混合检索:关键词检索很重要(专有名词、编号多)时,ES 或者支持稀疏向量和全文检索的方案更方便;
  3. 过滤条件的复杂度:需要按权限、部门、时间等复杂条件过滤时,看过滤和向量检索结合的性能;
  4. 现有技术栈:已有 PostgreSQL 或 ES 的团队,先用现有系统,运维成本最低;
  5. 更新频率:频繁更新和删除时,看各系统的写入和索引维护性能;
  6. 多租户:租户多时,看是否支持分区、按租户隔离;
  7. 成本:内存成本是大头,看是否支持量化和磁盘索引。

我的建议

  • 起步阶段用现有系统,快速验证业务价值;
  • 用自己的数据做压测:召回率、P99 延迟、带过滤条件的查询性能、写入性能;
  • 在应用层封装一层检索接口,以后需要换存储时影响范围可控。