阿里云 Milvus 磁盘索引新利器:百万级Topk高性能召回

背景

向量检索的选型评估长期停留在 k=10 / k=100 这个区间 ------ 无论是公开榜单、厂商白皮书还是多数基准报告,覆盖的都是"找最相似的几十条"这类典型在线查询。但随着召回 + 精排两阶段架构在推荐、搜索、RAG 中成为主流,向量层的职责已经发生变化:它不再是"直接给出答案",而是要一次性吐出数十万至百万级候选集,交给下游模型做精排。叠加大规模去重聚类、亿级库离线语义挖掘、风控近邻普查等场景,Large TopK 已经从"小众需求"变成了硬指标。

为什么 Large TopK 是一道硬门槛

越来越多的真实业务场景需要向量引擎具有大范围召回能力,比如:

  • 召回 + 精排两阶段架构 ------ 向量召回层要一次吐出几十万甚至上百万候选,交给下游 CTR 预测模型

  • 大规模去重与聚类 ------ 相似图片/文本聚簇,单次查询需要拿到整个簇

  • 离线数据挖掘与标注 ------ 从亿级库里一次性捞出某个语义邻域的全部样本

  • 合规与风控排查 ------ 对一个可疑样本做全库范围的近邻普查

这些场景的共同点是:k 不是几十,而是几十万到千万级。阿里云 Milvus 通过在容量型索引基础上通过算法优化,可以基于同一份索引支持千万级别 Topk 的查询,查询性能和召回率领先业内产品。开源VectorDBBench 也新增了对这个场景的 benchmark 覆盖, 在此基础上我们通过 VectorDBBench 提供的 Performance768D100M 数据集 进行 Topk1百万的 benchmark 测试,对比了其他主流向量搜索引擎的 TopK 能力天花板,Topk1百万查询的 p99 latency 和 recall,在不同维度上证明阿里云 Milvus 容量型索引在 large topk 场景实际搜索性能处于行业领先水平。

TopK 能力天花板:1,000 万,领先 2 ~ 1000 倍

各引擎实测能稳定返回结果的最大 k 值

阿里云 Milvus 的上限是 1,000 万 ------ 相当于在 1 亿条的库里一次性召回全库的 10%,并且在上限处能完整返回全部 1,000 万条结果,不缩水。

k=100 万:召回与延迟双料第一

在 k=1M 这个只有三家能跑的擂台上,阿里云 Milvus 在两个维度上同时领先(单线程串行测试):

  • 召回率最多领先 6.52 个百分点 ------ 在百万级结果集上,6.52pt 意味着多找回约 6.5 万条正确近邻,对下游精排模型的效果影响是实打实的

  • P99 延迟最高低 28% ------ 3.53 s vs 4.92 s

k=100:不是"牺牲小 topk 换大 topk"

一个合理的疑问是:阿里云 Milvus 的 Large TopK 优势,是不是靠牺牲常规小 k 场景换来的?

实测数据给出了否定答案 ------ 在 k=100 的常规场景下,阿里云 Milvus 依然三项指标全优:

规格最小:性能依然各项第一

由于各个引擎的容量型索引和压缩算法不同,所以以上结果在对比测试时所需要的最小运行资源是不同的。为了对齐计算资源,统一采用 128CU 计算资源作为测试基准,获得公正的结果对比。当然 128CU 不是Performance768D100M数据集最小的运行资源,在实际测试中阿里云 Milvus及个别竞品可以在最小32CU资源的前提下完成性能测试,不能完成测试的竞品不再图标里展示,在此资源下阿里云 Milvus依然在 Top1 百万和小 Topk 场景各方面均是最优。

如何使用 Large TopK 能力

在使用最新阿里云 Milvus 容量型集群 容量型索引索引的基础上,只需要打开 large TopK 查询开关,无需重建或者重新加载索引。

1、容量型磁盘索引准备

容量型索引使用文档:在阿里云 Milvus 上使用容量型磁盘索引

阿里云 Milvus 版本:2.6.18-0.2.2_3.11.2 版本及以上

2、在 collection 上打开 large topk 模式查询开关

  • 如果是新建 collection,推荐创建时设置属性
python 复制代码
from pymilvus import MilvusClient

client = MilvusClient(uri="your_uri", token="your_token")

client.create_collection(
    collection_name="your_collection",
    schema=schema,
    index_params=index_params,
    properties={"query_mode": "large_topk"}
)
  • 如果是已存在 collection,可以动态打开查询开关,已处于加载状态无需重新加载
python 复制代码
from pymilvus import MilvusClient

client = MilvusClient(uri="your_uri", token="your_token")

client.alter_collection_properties(
    collection_name="your_collection",
    properties={"query_mode": "large_topk"}
)

3、索引构建和 load 完成后执行查询,指定 limit 大小

python 复制代码
from pymilvus import MilvusClient

client = MilvusClient(uri="your_uri", token="your_token")

results = client.search(
    collection_name="your_collection",
    data=[query_vector],
    limit=1000000
)

测试条件

  • Benchmark:VectorDBBench

  • 数据集:Performance768D100M

  • 测试算力:相同 128CU 计算资源或者引擎可选上限

结语

在 k=10 / k=100 的常规赛道上,主流向量引擎的差距往往只是几个百分点的召回与几倍的吞吐。但当业务真正需要一次召回百万级候选时,差距会被放大成能与不能的区别:阿里云 Milvus,Topk 查询上限 1,000 万,且完整返回;在 k=1百万上召回与延迟双料第一;小 topk 场景同样最优。如果你的业务涉及召回+精排两阶段架构、大规模去重聚类、或亿级库的离线语义挖掘,Large TopK 能力应当被列为选型的一级指标。在这个场景上,阿里云 Milvus 目前是明确的领先者。

相关推荐
独立开发者阿乐1 小时前
llms.txt 是什么?为什么 AI 爬虫需要这个文件
人工智能·爬虫·geo优化·ai爬虫·llms.txt·ai收录·robots.txt
福兮说2 小时前
秋招简历让 AI 写了一版:它替我加了 JWT,还把课程设计写成了「高并发」
人工智能·课程设计·秋招·求职·简历
ZDN_is_beauty2 小时前
深度学习2-卷积神经网络
人工智能·深度学习·cnn
QQ机器人_插件2 小时前
鲲鹏恒控的跨平台交付 —— Windows 上组态,Linux 上运行
人工智能
XMAIPC_Robot2 小时前
储能控制器产品化:ARM+FPGA整机高低温、EMC可靠性测试实战总结
arm开发·人工智能·fpga开发·arm+fpga·rk3588+fpga
Martina_03212 小时前
AI生成的海岸城市一移动镜头,水面反射就跳?用6步统一反射探针、SSR与平面反射
图像处理·人工智能·平面·3d·ai·自然语言处理·游戏策划
Matlab程序猿2 小时前
【MATLAB源码-第459期】基于matlab的D-H模型与阻尼最小二乘逆运动学的六自由度机械臂五次轨迹规划及动力学前馈PD控制仿真。
人工智能·算法·matlab·d-h建模·六自由度串联机械臂
QYR-分析2 小时前
人机交互升级浪潮下,全球电容式触摸传感器市场格局与细分赛道深度研判
人工智能·人机交互
血小溅2 小时前
什么是 Agent?
人工智能