向量数据库
向量数据库是专门存储和查询向量(Embedding 模型输出的浮点数组)的数据库。它不像 MySQL 存原始文本,而是存文本经过 Embedding 后的数学表示,通过计算向量之间的相似度来检索。
为什么需要
传统数据库靠精确匹配:"跑步"只命中包含"跑步"的行。向量数据库靠语义相似:"想运动一下"能命中"今天早上跑步"——字面不同但意思相近。
| 场景 | 传统数据库 | 向量数据库 |
|---|---|---|
| 搜 "errorCode=5001" | ✅ 精确命中 | ❌ 可能漂移 |
| 搜 "今天心情不好" | ❌ 需含关键字 | ✅ 语义匹配到"失眠""烦躁" |
| 搜 CPU 型号 | ✅ 精确 | ❌ 可能匹配到相邻型号 |
两者不是替代,是互补。
主流产品
| 产品 | 定位 | 特点 |
|---|---|---|
| Milvus | 开源向量数据库 | 云原生、分布式、十亿级检索 |
| Qdrant | 开源向量数据库 | Rust 实现、高性能、过滤强 |
| Weaviate | 开源向量数据库 | 自带向量化、Hybrid Search |
| Pinecone | 云服务 | 免运维、Serverless |
| Chroma | 轻量嵌入式 | Python/JS SDK,适合原型开发 |
| pgvector | PostgreSQL 扩展 | 不用新装数据库,SQL 直接搜向量 |
和传统数据库的区别
| 传统数据库 | 向量数据库 | |
|---|---|---|
| 存什么 | 原始数据(文本、数字) | 向量(浮点数组) |
| 怎么查 | SQL / 精确匹配 / 范围 | 近邻搜索 / 相似度 |
| 排序依据 | ORDER BY 字段 | 余弦相似度 / 欧氏距离 |
| 适合 | 结构化统计 | 语义检索、推荐 |
在 RAG 中的角色
用户问题 → Embedding → 向量 → Milvus 近邻检索 → Top K 文档 → LLM 回答向量数据库是 RAG 检索层的核心组件——负责把"用户问题的语义"匹配到"最相关的知识库文档"。
📖 详细内容见 Elasticsearch(关键词检索)和 混合检索(ES + Milvus 双通道)。