默认参数是给"通用场景"的,你的场景需要自己的数据说话。
为什么要在 Milvus 上跑,不能用 Faiss 结论?
Faiss HNSW 和 Milvus HNSW有本质差异,以下两点是 Milvus 特有、Faiss 不存在的:
- Milvus Segment 架构:N 个 Segment 各搜各的 → 归并排序,efSearch 增大时延迟斜率更陡
- Milvus 混合检索:Dense + Sparse BM25 并行,Sparse 侧带入候选,改变了 Dense 侧 efSearch 的边际收益
实测验证了这一点:efSearch=8/16 出现"高召回+高延迟"反常模式(7ms),Milvus 特有,Faiss 完全不会出现。
实验设计与完整数据
5049 文档,50 条 query × 10 repeats:
| efSearch | Recall@5 | Recall@10 | p50 | p99 |
|---|---|---|---|---|
| 8 | 0.996 | 0.996 | 7.0ms | 12.7ms |
| 16 | 0.996 | 0.996 | 6.4ms | 11.8ms |
| 24 | 0.968 | 0.958 | 1.43ms | 2.74ms |
| 32 | 0.984 | 0.970 | 1.41ms | 2.58ms |
| 50 | 0.984 | 0.980 | 1.43ms | 2.12ms |
| 128 | 0.996 | 0.994 | 1.52ms | 2.81ms |
四条核心结论
- 拐点识别:efSearch=24 是 Recall 首次显著下降点
- 最优值:efSearch=32------比默认 50 略优,Recall 持平
- 代码建议:
efSearch = max(32, top_k*2) - Milvus 特有发现:低 efSearch 反常模式侧面验证必须在实际环境做消融
HNSW 内存增长模型
#mermaid-svg-hUL64kXjMY24ttwN{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hUL64kXjMY24ttwN .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hUL64kXjMY24ttwN .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hUL64kXjMY24ttwN .error-icon{fill:#552222;}#mermaid-svg-hUL64kXjMY24ttwN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hUL64kXjMY24ttwN .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hUL64kXjMY24ttwN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hUL64kXjMY24ttwN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hUL64kXjMY24ttwN .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hUL64kXjMY24ttwN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hUL64kXjMY24ttwN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hUL64kXjMY24ttwN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hUL64kXjMY24ttwN .marker.cross{stroke:#333333;}#mermaid-svg-hUL64kXjMY24ttwN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hUL64kXjMY24ttwN p{margin:0;}#mermaid-svg-hUL64kXjMY24ttwN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} HNSW 索引内存占用 vs 向量规模 10万50万100万500万 242220181614121086420 内存 (GB)