向量数据库的核心逻辑
向量数据库与传统数据库最大的不同在于:它处理的是非结构化数据的语义,而不是精确的字段值。它的核心逻辑可以概括为:
将非结构化数据转化为向量,通过计算向量间的距离来衡量数据的相似性,并通过专门的索引结构实现高效的近似搜索。
这个逻辑的实现依赖于三个核心组件:向量嵌入、索引结构和相似度度量。

1
向量数据库的基本构成
1. 向量嵌入(Embedding)—— 数据的“语义指纹”
向量数据库存储的不是原始文本或图片,而是它们的向量表示。这些向量通常有几百到上千维,由专门的嵌入模型(如BERT、CLIP)生成。关键特性是:语义上相似的对象,在向量空间中的距离也更近。
例如,“猫”和“猫咪”的向量会很接近,而“猫”和“拖拉机”则相距很远。这种特性使得基于相似性的搜索成为可能。
2. 相似度度量(Similarity Metrics)—— 判断“像不像”
向量数据库通过数学公式量化向量间的距离,常用的有三种:
度量方式 | 计算公式 | 特点 | 适用场景 |
|---|---|---|---|
余弦相似度 | cos(θ) = (A·B)/(|A||B|) | 关注方向而非大小,范围[-1,1] | 文本嵌入、语义搜索 |
欧氏距离 | √Σ(Aᵢ - Bᵢ)² | 空间中两点间的直线距离 | 图像特征、聚类分析 |
点积 | A·B | 结合幅度和方向,未归一化 | 推荐系统、某些归一化数据 |
在创建索引时,你需要选择一种距离类型(如
DistanceType.COSINE
),这决定了后续搜索时如何计算相似度。
3. 索引结构(Index)—— 加速搜索
索引是向量数据库的“发动机”。它通过特定的数据结构,将海量向量组织起来,使得搜索时无需遍历整个数据集。主流的索引算法包括:
索引类型 | 核心思想 | 特点 | 适用场景 |
|---|---|---|---|
FLAT(暴力索引) | 不建索引,直接遍历所有向量 | 100%召回率,但速度慢,数据量大时不适用 | 小规模数据集、精度要求极高的场景 |
IVF(倒排文件) | 用K-means聚类,将向量分到不同桶,搜索时只查最近的几个桶 | 速度快,精度略降,内存效率高 | 中等规模数据,需平衡速度与精度 |
HNSW(分层可导航小世界) | 构建多层图结构,上层图长距离跳跃,下层图精细搜索 | 速度极快,召回率高,但内存占用较大 | 高维数据,低延迟要求场景,现代向量数据库首选 |
PQ(乘积量化) | 将向量切分为子向量,分别量化编码,大幅压缩存储 | 压缩比高(4-32倍),内存占用极低 | 内存受限场景,可接受轻微精度损失 |
DISKANN | 基于Vamana图的磁盘索引,将图结构和原始数据存于SSD | 支持十亿级数据,内存成本低 | 超大规模数据集,内存无法容纳时 |
4. 量化(Quantization)—— 压缩
为了节省内存和提升计算速度,向量数据库常采用量化技术:
在选择索引时,可以通过Quant参数指定量化方式。
5. 元数据与标量索引
向量数据库不仅能存向量,还能存相关的元数据(如作者、时间戳、标签)。为了支持混合检索(向量相似度+标量过滤),数据库会为这些标量字段建立额外的标量索引。在搜索时,可以通过Filter参数指定过滤条件,例如只搜索作者为“张三”的文档。
2
搜索是如何进行的?—— 三步走流程
向量数据库的搜索过程可以拆解为三个清晰的步骤:
第1步:查询向量化
用户输入一个查询(如一段文本、一张图片),系统调用与建库时相同的嵌入模型,将其转换为向量。
第2步:索引检索(近似最近邻搜索)
这是核心步骤。系统将查询向量交给索引结构,利用ANN算法快速找到一批“候选结果”。这一过程并非暴力遍历,而是通过精心设计的数据结构(如图、聚类桶)在极短时间内完成。
以HNSW为例:
第3步:后处理与重排序
如果需要返回更多上下文(如检索到的文本片段的前后段落),还可以通过expand_chunk等参数扩展结果。
3
一个完整的搜索示例
假设有一个存储了《三国演义》和《西游记》片段的数据集,每个片段都有author、bookName等元数据。
查询:“吕布是什么人?”
过程:
[0.3123, 0.43, 0.213]。结果可能类似:
布大惊,与陈宫商议...搜索结果中的Score字段即表示相似度分数
4
为什么需要这些复杂性?
你可能会问:为什么不能直接把所有向量加载到内存里暴力搜索?
而通过索引+量化,可以在保持高召回率的同时,将搜索时间降低到毫秒级,内存占用减少数倍。这正是向量数据库的核心价值。
5
在机器人领域的应用意义