调优指南:HNSW 的 M、ef_construction、ef_search 到底在调什么

举报
yd_251748319 发表于 2026/10/31 00:48:02 2026/10/31
【摘要】 向量检索用 HNSW,很多人只知道“调大 M 和 ef 会更准但更慢”。这句话没错,但不够用来做决策。把三个参数拆开看,各自控制的是不同的东西。M 控制图的连通度。 每个节点最多连 M 条边。M 越大,图越密,检索时能走的路径越多,召回越高,但内存占用和构建时间也越高。M 太小,图会变得“稀疏”,检索容易走进死胡同。经验起点是 16,数据维度高、分布复杂可以到 32 或 48,但不要盲目往上...

向量检索用 HNSW,很多人只知道“调大 M 和 ef 会更准但更慢”。这句话没错,但不够用来做决策。把三个参数拆开看,各自控制的是不同的东西。

M 控制图的连通度。 每个节点最多连 M 条边。M 越大,图越密,检索时能走的路径越多,召回越高,但内存占用和构建时间也越高。M 太小,图会变得“稀疏”,检索容易走进死胡同。经验起点是 16,数据维度高、分布复杂可以到 32 或 48,但不要盲目往上堆,内存会先扛不住。

ef_construction 控制建图时的候选集大小。 建图时每个节点要找多少个候选邻居。调大它,图的质量更好,但构建更慢。它不影响查询时的内存,只影响索引构建成本。如果索引是离线构建、查询频繁,这个参数可以给得慷慨一点。

ef_search 控制查询时的候选集大小。 这是运行时参数,调大它,召回更高,但延迟上升。它可以在查询时动态调整,适合按场景做分级:普通搜索用低 ef_search,精确检索用高值。

一个实用调参顺序:先固定 M=16、ef_construction=200,用评估集测不同 ef_search 下的召回和延迟曲线,找到满足召回要求的拐点;再尝试调大 M 看召回有没有明显提升,如果没有,说明瓶颈不在连通度;最后才动 ef_construction,因为它只影响构建。

还有一个容易踩的坑:过滤条件。带 metadata filter 的查询,如果过滤后候选集很小,HNSW 的图遍历可能找不到足够多的有效邻居,召回会骤降。这时候要么调大 ef_search,要么用支持过滤感知的索引实现,别指望默认参数能兜住。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。