向量数据库选型:Milvus vs Elasticsearch vs PgVector 生产环境实测
2026/5/5 0:48:35 网站建设 项目流程

一、三者定位差异

Milvus → 专业向量数据库,为向量而生 Elasticsearch → 搜索引擎 + 向量扩展,全能选手 PgVector → PostgreSQL 扩展,关系型 + 向量混合
维度MilvusElasticsearchPgVector
本质专用向量数据库全文搜索引擎 + 向量能力PostgreSQL 插件
首次发布20192010 (向量 8.x+)2021
开源协议Apache 2.0SSPL / Elastic LicensePostgreSQL License
语言Go + C++JavaC
云服务Zilliz CloudElastic Cloud各大云 RDS PG

二、架构对比

Milvus — 专为向量设计的分布式架构

┌──────────────┐ │ SDK/API │ └──────┬───────┘ ▼ ┌──────────────┐ │ Proxy │ ← 负载均衡 & 路由 └──────┬───────┘ ┌───────────┼───────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ QueryNode│ │ DataNode │ │IndexNode │ │ (查询) │ │ (写入) │ │ (建索引) │ └──────────┘ └──────────┘ └──────────┘ │ │ │ └───────────┼───────────┘ ▼ ┌──────────────────┐ │ MinIO/S3 + etcd │ ← 对象存储 + 元数据 └──────────────────┘

特点:存储计算分离、组件独立扩展、支持 GPU 加速索引

Elasticsearch — 倒排索引 + 向量索引混合

┌──────────────┐ │ Coordinating │ ← 查询路由 │ Node │ └──────┬───────┘ ┌──────────┼──────────┐ ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ Data │ │ Data │ │ Data │ │ Node 1 │ │ Node 2 │ │ Node 3 │ │ ┌─────┐ │ │ ┌─────┐ │ │ ┌─────┐ │ │ │HNSW │ │ │ │HNSW │ │ │ │HNSW │ │ │ │Index │ │ │ │Index │ │ │ │Index │ │ │ └─────┘ │ │ └─────┘ │ │ └─────┘ │ │+倒排索引│ │+倒排索引│ │+倒排索引│ └─────────┘ └─────────┘ └─────────┘

特点:向量搜索和全文搜索原生混合、生态成熟、运维体系完善

PgVector — PostgreSQL 原生扩展

┌──────────────────────────┐ │ PostgreSQL │ │ ┌────────────────────┐ │ │ │ pgvector 扩展 │ │ │ │ ┌──────┐ ┌──────┐│ │ │ │ │IVFFlat│ │ HNSW ││ │ │ │ └──────┘ └──────┘│ │ │ └────────────────────┘ │ │ + 关系表 + SQL 查询 │ │ + 事务 + JOIN + ACID │ └──────────────────────────┘

特点:SQL 原生操作向量、与业务数据零距离、无额外运维


三、核心能力对比

索引算法支持

索引类型MilvusElasticsearchPgVector
HNSW✅ (0.5.0+)
IVF_FLAT
IVF_PQ
IVF_SQ8
FLAT (暴力搜索)
DiskANN
GPU 索引
SCANN

功能对比

功能MilvusElasticsearchPgVector
向量维度上限32,7684,09616,000
标量过滤✅ 原生支持✅ 强大✅ SQL WHERE
全文搜索⚠️ 基础✅ 最强✅ (pg tsvector)
混合检索 (向量+关键词)✅ 最强
多向量字段
动态 Schema❌ (需建表)
事务 ACID
JOIN 查询
分布式扩展✅ 原生✅ 原生⚠️ 需 Citus
多租户✅ Partition Key✅ Index per tenant✅ Schema/Row

四、性能实测数据

测试环境

硬件: 8C32G × 3 节点 数据集: 100 万条 768 维向量 (BGE-base 模型生成) 索引: HNSW (M=16, ef_construction=200) 查询: Top-10, ef=64, 单线程 & 并发

4.1 写入性能

指标MilvusElasticsearchPgVector
批量写入 100 万条45s120s180s
建索引时间30s与写入同步240s
写入吞吐 (条/秒)22,0008,3005,500
Milvus 写入最快,因为采用了 LSM-Tree 架构 + 异步建索引

4.2 查询延迟 (单线程)

数据量MilvusElasticsearchPgVector
10 万条0.8ms2.1ms1.5ms
100 万条1.2ms3.8ms4.2ms
500 万条1.8ms6.5ms12.3ms
1000 万条2.5ms9.2ms25.6ms

4.3 查询吞吐 (并发 QPS)

并发数MilvusElasticsearchPgVector
1 线程830450650
10 线程6,2003,8002,100
50 线程15,0008,5003,200
100 线程18,00010,2003,500
PgVector 高并发下受限于 PostgreSQL 的连接模型

4.4 召回率 (Recall@10)

索引参数MilvusElasticsearchPgVector
HNSW(M=16, ef=64)98.2%97.8%98.0%
HNSW(M=32, ef=128)99.5%99.2%99.3%
IVF_FLAT(nlist=256)97.0%N/A96.5%
召回率三者差距不大,都能满足生产需求

4.5 带标量过滤的向量查询

场景:100 万条数据中,先按category = 'tech' AND date > '2024-01-01'过滤,再做 Top-10 向量搜索

过滤比例MilvusElasticsearchPgVector
过滤掉 10%1.5ms1.2ms2.8ms
过滤掉 50%2.0ms1.5ms3.5ms
过滤掉 90%3.2ms1.8ms5.0ms
过滤掉 99%5.5ms2.2ms4.8ms
ES 在混合过滤场景表现最好,因为倒排索引 + 向量索引的组合最成熟

五、资源消耗对比

100 万条 768 维向量

资源MilvusElasticsearchPgVector
磁盘占用3.2 GB5.8 GB2.1 GB
内存占用 (索引)3.5 GB4.2 GB2.8 GB
空载内存800 MB1.5 GB200 MB
最小部署资源4C8G (Standalone)4C8G1C2G
PgVector 资源消耗最低,因为它只是 PG 的一个扩展,没有独立进程开销

六、运维复杂度

维度MilvusElasticsearchPgVector
部署难度中高 (依赖 etcd+MinIO)中 (JVM 调优)低 (PG 扩展)
最小部署1 个 Standalone 进程1 个节点CREATE EXTENSION
集群部署复杂 (7+ 组件)中等 (节点发现)需 Citus
监控工具Grafana DashboardKibanapg_stat + Grafana
备份恢复MinIO 快照Snapshot APIpg_dump / pg_basebackup
版本升级需谨慎 (Schema 变化)成熟PG 生态成熟
学习曲线陡峭中等平缓 (会 SQL 就行)

七、典型使用场景

场景 1:RAG 知识库问答

需求: 50万文档,768维向量,QPS < 50,需要全文+向量混合搜索 推荐: Elasticsearch ✅ 原因: - 全文搜索 + 向量搜索原生混合(BM25 + kNN) - 数据量不大,ES 性能够用 - 混合排序能力最强 次选: PgVector 原因: 如果已有 PG,加个扩展最简单

场景 2:电商/推荐系统

需求: 5000万商品向量,1536维,QPS > 5000,按品类/价格过滤 推荐: Milvus ✅ 原因: - 大规模向量检索性能最强 - 高并发下吞吐远超其他 - 支持 DiskANN(低内存跑大数据集) 次选: Elasticsearch(数据量 < 1000万时)

场景 3:小型应用 / MVP

需求: 10万条数据,不想增加运维,已有 PostgreSQL 推荐: PgVector ✅ 原因: - 零额外运维 - SQL 搞定一切(向量 + 业务数据 JOIN) - 够用 代码: SELECT * FROM documents ORDER BY embedding <=> '[0.1, 0.2, ...]'::vector LIMIT 10;

场景 4:多模态搜索(图片+文本)

需求: 图文混合检索,高维向量(1536+),需要 GPU 加速 推荐: Milvus ✅ 原因: - 支持 32768 维 - GPU 索引加速 - 多向量字段原生支持

场景 5:已有 ELK 栈

需求: 已有 ES 集群做日志/搜索,想加向量能力 推荐: Elasticsearch ✅ 原因: - 不增加运维负担 - 复用已有集群和运维能力 - 向量能力作为增量功能

八、选型决策树

你的数据量? │ ├── < 100 万条 │ │ │ ├── 已有 PostgreSQL → ✅ PgVector(最省事) │ ├── 已有 ES 集群 → ✅ Elasticsearch(复用) │ └── 从零开始 → ✅ PgVector 或 Milvus Lite │ ├── 100万 - 1000万条 │ │ │ ├── 需要全文+向量混合搜索 → ✅ Elasticsearch │ ├── 纯向量搜索,高并发 → ✅ Milvus │ └── 事务要求强 → ✅ PgVector + 优化 │ └── > 1000 万条 │ ├── QPS > 5000 → ✅ Milvus(唯一选择) ├── QPS < 5000 + 混合搜索 → ✅ Elasticsearch └── 内存受限 → ✅ Milvus (DiskANN) 你的团队情况? │ ├── 没有专门的基础设施团队 → ✅ PgVector(最简单) ├── 有 ES 运维经验 → ✅ Elasticsearch └── 有分布式系统经验 → ✅ Milvus

九、综合评分

维度 (权重)MilvusElasticsearchPgVector
纯向量性能 (25%)★★★★★★★★☆★★★
混合搜索 (20%)★★★★★★★★★★★☆
运维简单度 (20%)★★★★★★★★★★
扩展性 (15%)★★★★★★★★★★★
生态成熟度 (10%)★★★★★★★★★★★★
资源效率 (10%)★★★★★☆★★★★★
总分3.73.83.6

十、一句话总结

Milvus— 性能怪兽,大规模向量场景的最优解,但运维成本高
Elasticsearch— 全能选手,混合搜索最强,已有 ELK 栈的团队首选
PgVector— 轻量之王,100 万条以下、不想加运维的最佳选择

大多数中小型 RAG 应用:PgVector 起步 → 数据量增长后迁移到 Milvus/ES,是最务实的路径。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询