向量索引
向量索引是一种专门的数据结构,用于加速在大规模向量 Embedding 集合上的相似度搜索。
如果没有索引,查找与查询最相似的结果需要将其与数据库中的每一个向量进行比较 — 这种方式称为暴力搜索或 Flat 搜索。
暴力搜索的特点:
- ✅ 精确:返回精确的最相似结果 — 没有近似。
- ⚠️ 大规模下极慢:面对数百万或数十亿向量时,查询可能需要数秒甚至数分钟,对于实时应用来说不切实际。
近似搜索 vs. 精确搜索
大多数向量索引使用***近似最近邻(ANN)***算法。
ANN 不是寻找精确的最近匹配,而是找到非常接近的近似结果 — 在实际应用中通常与精确结果无法区分 — 同时在速度和效率上带来巨大提升。
对于语义搜索或推荐系统等真实场景,这种微小的精度权衡换来了速度和可扩展性的巨大提升。简而言之:足够精确,同时极致快速 ✨。
Recall:衡量近似质量
Recall 是评估 ANN 算法保持结果质量的标准指标。
它量化的是真实最近邻(通过精确暴力搜索确定的)中,出现在近似方法返回的 top-k 结果中的比例:
示例:
- 如果你请求 top 10 结果,其中 9 个与暴力搜索的真实 top 10 匹配,则
recall@10为 90%。 - 高 Recall(例如 ≥ 96%)通常意味着对于大多数应用,近似结果与精确搜索几乎无法区分。
不同的索引类型(如 HNSW)及其参数(如 ef_search)允许你精细调节 Recall、查询速度和资源使用之间的平衡 — 从而为你的特定精度和性能需求进行优化。
向量索引类型
Zvec 支持以下向量索引类型,各自适用于不同的使用场景、数据集规模和性能需求:
根据你的数据规模、延迟要求和精度容忍度选择索引类型。始终使用与你的 Embedding 模型训练时一致的距离度量。