标准回答
向量数据库专门存储与检索高维向量,核心能力是「快速找出与 query 最相似的若干向量」。
工作流程
- 写入(索引构建):把文本/图像等原始数据用 embedding 模型转成向量,连同元数据(来源、标签、时间)一起写入,并基于向量构建索引结构。
- 查询(近邻搜索):把 query 同样 embedding 成向量,在索引中按距离(余弦 / 内积 / L2)搜索最近邻,返回 top-k 最相似向量及其元数据,常配合元数据过滤。
为什么需要 ANN(近似最近邻)
精确最近邻(Brute-force KNN)要把 query 与库里每个向量都算一遍距离,复杂度随数据量线性增长。在亿级、高维向量上每次查询都全量计算,延迟无法接受。ANN 用「近似」换速度:允许极小的召回损失,把查询从遍历全库降到只看一小部分候选,延迟降几个数量级。
HNSW / IVF / PQ 区别
- HNSW(分层可导航小世界图):构建多层近邻图,查询时从顶层稀疏图逐层下探贪心逼近。查询快、召回高,但图结构常驻内存,内存开销大。
- IVF(倒排文件 + 聚类分桶):先用聚类(如 k-means)把向量分到若干桶(cluster),查询时只搜 query 所属的少数几个桶。省内存、构建快,召回受探测桶数(nprobe)影响,是速度与召回的旋钮。
- PQ(乘积量化):把高维向量切成子段并用码本量化压缩,大幅降低内存占用、加速距离估算,代价是精度略降。PQ 是压缩手段,常与 IVF 组合成 IVF+PQ,在海量数据下兼顾内存与速度。
选型权衡:追求最高召回与低延迟、内存充足 → HNSW;数据量大、内存吃紧 → IVF 或 IVF+PQ;需要极致压缩可叠加 PQ。本质是在速度、内存、召回三者间取舍。
常见误区
⚠️ 常见踩坑
误以为向量库返回的 top-k 一定是真正的最近邻。ANN 是近似算法,结果可能漏掉个别真实近邻;召回率由参数(HNSW 的 efSearch、IVF 的 nprobe)控制,调高更准但更慢。把 ANN 当成精确 KNN 会高估检索可靠性。
追问
追问 1:HNSW 里的 efSearch 和 IVF 里的 nprobe 分别调什么?
两者都是「召回 vs 延迟」的旋钮。HNSW 的 efSearch 控制查询时维护的候选邻居数,调大则探索更充分、召回更高但更慢。IVF 的 nprobe 控制查询时探测的桶数,nprobe=1 最快但易漏,调大则覆盖更多桶、召回更高但延迟上升。两者都需在验证集上按目标召回率调优。
追问 2:PQ 既然会损失精度,为什么还要用?怎么补偿精度损失?
PQ 的价值在于把向量内存压缩到原来的几分之一甚至更低,让单机能装下海量向量并加速距离估算,这在亿级规模下往往是可行性问题而非优化问题。精度损失可通过「粗排 + 精排」补偿:先用 IVF+PQ 快速召回候选,再对候选用原始全精度向量重新计算距离(rerank/refine)做精排,从而兼顾内存与最终精度。
追问 3:向量检索如何与元数据过滤结合,比如「只查某用户、近 7 天」的数据?
这是带过滤的 ANN(filtered search),有两种思路。Pre-filter:先按元数据缩小候选集再做向量搜索,过滤性强但可能破坏索引结构、命中过少。Post-filter:先向量召回较多 top-k 再按元数据筛,简单但可能筛完不够 k 个。生产中常用支持过滤的索引或分区(按租户/时间分片)来平衡,必要时放大初始 k 以保证过滤后仍有足量结果。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习