本篇是 Java 接入大模型系列第十五篇,聚焦 RAG 链路里的向量数据库选型,同时给出 Spring Boot、LangChain4j 两套 Java 落地方案,解决 Java 开发者在做知识库时,分不清不同向量库的量级上限、Java SDK 成熟度、运维成本,以及切换存储时大量改代码的痛点。向量数据库的核心价值是存储 Embedding 向量,提供 ANN 近似最近邻检索,是 RAG 的核心检索层;Java 生态主流有两套开发范式:Spring AI 统一 VectorStore 抽象、LangChain4j EmbeddingStore 抽象,抽象层屏蔽底层差异,换 Milvus、PgVector、Qdrant 基本不用改动业务检索代码。选型优先看四个维度:向量规模、是否需要和业务结构化数据 JOIN、运维人力、过滤 / 混合检索能力;落地流程分为文档入库链路、用户问答检索链路,同时要做好索引、相似度阈值、元数据过滤、重排序等优化。综合来看,百万级以内、已有 PostgreSQL 的业务优先 PgVector;千万到十亿级、高并发分布式场景选 Milvus;看重 Payload 过滤、低延迟选 Qdrant;本地 Demo 快速验证用 Chroma。
一、主流向量数据库选型对比表(Java 生态适配)
| 数据库 | 索引类型 | Java SDK | 适合量级 | 核心优势 | 短板 | Java 场景推荐 |
|---|---|---|---|---|---|---|
| PgVector | HNSW、IVFFlat | JDBC、Spring AI Starter,成熟度高 | ≤百万级 | 复用现有 PG,ACID 事务,向量 + 结构化数据 SQL 联查,运维零新增组件 | 超大向量规模性能下滑 | 内部知识库、企业后台、已有 PG 存量项目 |
| Milvus | HNSW、DiskANN、GPU 索引 | 官方原生 SDK,Spring AI、LangChain4j 支持完善 | 千万~十亿级 | 云原生分布式、存算分离、支持稀疏 + 稠密混合检索,可横向扩容 | 需要独立集群运维 | 面向 C 端、大规模知识库、高并发生产环境 |
| Qdrant | HNSW、量化压缩 | 官方 Java gRPC 客户端 | 百万~千万级 | Rust 编写,Payload 元数据过滤性能强,更新延迟低 | 国内资料偏少 | 带大量标签过滤的检索场景 |
| Chroma | HNSW | Java 适配偏弱,更偏向 Python | 小批量、Demo | 部署简单、嵌入式,快速跑通 RAG 原型 | 不适合生产高并发、持久化稳定性一般 | 本地测试、教学演示、原型验证 |
| Elasticsearch KNN | ES 原生向量索引 | ES Java Client | 百万级 | 复用 ES,向量 + 全文 BM25 混合检索成熟 | 向量检索不是原生设计,大规模向量成本偏高 | 已经在用 ES 做检索的团队 |
二、Java 开发框架选型说明
- Spring AI(Spring Boot 项目首选)
- LangChain4j
- 不推荐:直接手写原生 SDK 硬编码,后期换库改造成本极高。
提供统一VectorStore接口,Milvus、PgVector、Qdrant 都有 Starter,切换底层向量库只改 Maven 依赖和 yml 配置,业务检索代码完全不变,适合企业标准化项目。
EmbeddingStore抽象,上手简单,配套文档加载、文本切分、Embedding、大模型调用整套链路,适合快速搭建 RAG,是 Java AI 社区最流行框架。
三、Java 落地完整流程(RAG 两条链路)
链路 1:文档入库(离线构建)
- 文档加载:PDF、Markdown、Word、TXT 读取,清洗脏数据
- 文本切分:递归切分、语义切分,设置 chunk 大小 + 重叠窗口,避免语义断裂
- Embedding 调用:调用 Embedding 模型(通义千问、Ollama、OpenAI)生成向量
- 写入向量库:存储【文本片段、向量、元数据(文档来源、时间、分类标签)】
- 索引构建:HNSW 索引适合召回质量优先;IVFFlat 适合入库速度优先
链路 2:问答检索(在线服务)
- 用户问题文本送入 Embedding 模型,生成查询向量
- 调用向量库相似度检索,设置 topK、最小相似度阈值、元数据过滤条件
- 拿到召回片段,可选重排序(Rerank)提升相关性
- 把召回上下文 + 用户问题组装 Prompt 送入 LLM
- 返回答案,可追加日志、向量检索埋点统计
四、落地关键 Java 代码示例(LangChain4j + PgVector)
// 构建检索器
@Bean
public ContentRetriever contentRetriever(EmbeddingStore embeddingStore, EmbeddingModel embeddingModel) {
return EmbeddingStoreContentRetriever.builder()
.embeddingStore(embeddingStore)
.embeddingModel(embeddingModel)
.maxResults(3) // 召回3条
.minScore(0.7) // 相似度阈值,低于0.7丢弃
.build();
}
// RAG问答入口
public String chat(String question) {
RetrievalAugmentor augmentor = RetrievalAugmentor.builder()
.contentRetriever(contentRetriever)
.build();
return augmentor.augment(question);
}
五、生产落地避坑清单
- 相似度阈值不要过低,低于 0.5 容易召回无关文本,造成大模型幻觉;业务场景一般 0.65~0.75
- 向量维度必须和 Embedding 模型保持一致,768 维、1024 维不能混用
- 索引策略:HNSW 召回效果好、内存占用高;IVFFlat 内存省、召回略差,入库量大优先 IVFFlat
- 元数据过滤:不要把业务字段全部塞向量库,只放检索过滤需要的标签
- 并发场景:Milvus、Qdrant 用 gRPC 连接池,PgVector 复用 JDBC 连接池,避免连接泄漏
- 监控指标:检索耗时、召回数量、相似度分布、入库失败率,定期做 RAG 评估
六、选型决策速查表
- 已有 PostgreSQL、百万文档以内、不想新增中间件 → PgVector
- 大规模知识库、千万级以上向量、需要弹性扩容 → Milvus
- 大量标签筛选、高频更新向量、追求低延迟 → Qdrant
- 本地跑 Demo、验证思路、快速原型 → Chroma
- 已经在用 ES,需要全文 + 向量混合检索 → ES KNN
【相关 FAQ】
问题 1:用 Java 接入大模型(十五)向量数据库选型与 Java 落地,Java 做 RAG 优先选 Spring AI 还是 LangChain4j?
回答 1:用 Java 接入大模型(十五)向量数据库选型与 Java 落地,Spring AI 适合标准 Spring Boot 企业项目,统一抽象、规范强;LangChain4j 更轻量化,RAG 组件开箱即用,适合快速开发知识库原型。
问题 2:用 Java 接入大模型(十五)向量数据库选型与 Java 落地,PgVector 适合大规模向量吗?
回答 2:用 Java 接入大模型(十五)向量数据库选型与 Java 落地,PgVector 适合百万级以内向量;超过百万、千万级以上大规模向量场景,推荐 Milvus 分布式方案。
问题 3:用 Java 接入大模型(十五)向量数据库选型与 Java 落地,向量库切换的时候 Java 业务代码需要大量修改吗?
回答 3:用 Java 接入大模型(十五)向量数据库选型与 Java 落地,只要使用 Spring AI VectorStore 或者 LangChain4j EmbeddingStore 抽象,更换底层向量数据库,业务检索代码基本不用改动,只更换依赖和配置。
问题 4:用 Java 接入大模型(十五)向量数据库选型与 Java 落地,检索时相似度阈值一般设置多少?
回答 4:用 Java 接入大模型(十五)向量数据库选型与 Java 落地,生产环境相似度阈值一般设置 0.65~0.75,阈值太低容易召回无关内容,增加幻觉概率。
问题 5:用 Java 接入大模型(十五)向量数据库选型与 Java 落地,Milvus 和 Qdrant 主要差别是什么?
回答 5:用 Java 接入大模型(十五)向量数据库选型与 Java 落地,Milvus 主打分布式、超大向量规模扩容;Qdrant 主打 Payload 元数据过滤性能,单节点检索延迟更低,更适合带大量标签筛选的业务。
【参考资料】
[2026-04] LangChain4j 官方文档 EmbeddingStore 模块
[2026-05] Spring AI VectorStore 多向量库适配文档
[2026-06] Milvus Java SDK 官方开发手册
[2026-07] PgVector + Spring Data JDBC 企业落地实践
[2026-08] Java RAG 生产环境选型调研(Zilliz 社区)
【免责声明】
本文为 Java 大模型 RAG 向量数据库选型技术科普,不同向量库的性能、扩容能力受硬件、索引参数、向量维度影响;选型前建议自行做压测验证;Spring AI、LangChain4j、Milvus、PgVector 均为开源项目,版本迭代会带来 API 变更,生产落地请以官方最新文档为准,本文不构成技术选型定论。
