向量数据库入门:语义搜索的实现原理
从向量、相似度到索引,讲清语义搜索的底层原理,以及向量数据库与普通数据库的区别。
「语义搜索」如今随处可见,它的底层依赖向量数据库。本文带你理解其原理,而非止步于调 API。
从关键词到语义
传统搜索靠关键词匹配,搜「手机」找不到「智能手机」之外的相关词。语义搜索则把文本转成向量,让「意思相近」的文本在向量空间中彼此靠近。
向量与相似度
Embedding 模型把一段文本映射为一个高维向量。判断两段文本是否相似,就是计算两个向量的距离,常用余弦相似度:
function cosine(a, b) {
const dot = a.reduce((s, v, i) => s + v * b[i], 0);
const na = Math.sqrt(a.reduce((s, v) => s + v * v, 0));
const nb = Math.sqrt(b.reduce((s, v) => s + v * v, 0));
return dot / (na * nb); // 越接近 1 越相似
}
向量数据库做了什么
普通数据库擅长「精确匹配」和「范围查询」,却不擅长「找最近邻」。向量数据库专门优化近似最近邻搜索(ANN):
- 用 HNSW 等索引结构,把暴力搜索的 O(n) 降到近似 O(log n);
- 支持亿级向量上的毫秒级检索;
- 存储向量 + 元数据,支持过滤与混合查询。
常见选型
- 专用向量库:Pinecone、Weaviate、Milvus、Qdrant;
- 扩展的数据库:PostgreSQL 的 pgvector、Redis 的向量模块;
- 轻量本地方案:内存库如 Faiss、HNSWLib,适合原型。
何时用向量库
当数据量大(百万级)且需要低延迟相似搜索时,专用向量库才值得引入。小规模场景,内存方案或 pgvector 足够。
结语
向量数据库是 AI 应用的基础设施。理解「向量化 + 相似度 + 索引」这三件事,你就能为不同的 AI 应用做出正确的存储选型。