向量数据库入门:语义搜索的实现原理

从向量、相似度到索引,讲清语义搜索的底层原理,以及向量数据库与普通数据库的区别。

「语义搜索」如今随处可见,它的底层依赖向量数据库。本文带你理解其原理,而非止步于调 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 应用做出正确的存储选型。