首页/案例库/向量数据库原理
高级数据库

向量数据库原理

如何在亿级向量中毫秒级找到最相似的那些

RAG 和语义搜索的底层是向量数据库:存储高维向量(如 1536 维的 Embedding),支持近似最近邻(ANN)查询。暴力搜索 O(n) 太慢,HNSW、IVF、PQ 等索引算法将搜索复杂度降到 O(log n) 级别。本案例深入剖析这些算法的原理:HNSW 用多层跳表实现「六度分隔」快速导航,IVF 用聚类缩小搜索范围,PQ 用量化压缩内存占用。

向量数据库HNSWIVF近似最近邻Embedding语义搜索
STEP_1
相同语义的 Embedding 向量在空间中聚集成簇
余弦相似度、欧氏距离、点积 — PROCESSING
similarity.log
// 余弦相似度
function cosineSimilarity(a: number[], b: number[]): number {
  const dotProduct = a.reduce((sum, ai, i) => sum + ai * b[i], 0)
  const normA = Math.sqrt(a.reduce((sum, ai) => sum + ai * ai, 0))
  const normB = Math.sqrt(b.reduce((sum, bi) => sum + bi * bi, 0))
  return dotProduct / (normA * normB)
}

// 欧氏距离
function euclideanDistance(a: number[], b: number[]): number {
  return Math.sqrt(a.reduce((sum, ai, i) => sum + (ai - b[i]) ** 2, 0))
}

// 点积
function dotProduct(a: number[], b: number[]): number {
  return a.reduce((sum, ai, i) => sum + ai * b[i], 0)
}

// 选择建议
// - 文本语义搜索:余弦相似度(方向重要,模长已归一化)
// - 图像相似搜索:欧氏距离(像素级差异)
// - 推荐系统:点积(用户向量 · 物品向量 = 偏好分数)

// 归一化向量后,余弦相似度 = 点积
// 很多数据库用归一化 + 点积来加速计算

相似度度量向量相似度是语义搜索的基础。余弦相似度(Cosine Similarity)衡量向量方向的夹角,归一化后范围 [-1, 1],适合文本 Embedding;欧氏距离(L2 Distance)衡量空间中的绝对距离;点积(Inner Product / Dot Product)兼顾方向和模长,适合推荐系统。选择哪种度量取决于 Embedding 模型的训练方式——OpenAI 的 text-embedding-3 建议用余弦相似度。

实时沙盒SANDBOX
FAULT_INJECTED
快速场景
手动调节
索引类型
选择 ANN 算法
使用选定的索引算法
向量数量
数据库中的向量总数
1000k
数据量适中
搜索精度 (ef)
HNSW 的 efSearch 参数
100
精度/速度平衡
显示内存占用
隐藏内存信息