078、特征向量检索慢、召回低?Faiss/Milvus 索引选型与向量降维的相似搜索方案 078、特征向量检索慢、召回低?Faiss/Milvus 索引选型与向量降维的相似搜索方案一、深夜的告警邮件凌晨两点,手机震了。告警邮件标题写着“相似搜索服务P99延迟突破800ms”,附带的监控截图里,召回率曲线像心电图一样剧烈抖动——从95%直接跌到62%。我盯着屏幕,脑子里闪过上周刚上线的500万条128维人脸特征向量。当时测试环境只有10万条,一切正常。生产环境一压,索引构建时间从3秒变成37分钟,查询延迟从5ms飙升到200ms,最要命的是,某些长尾查询直接返回空结果。这不是个例。做图像搜索、推荐系统、甚至NLP语义匹配的朋友,迟早都会撞上这道墙:向量检索的“不可能三角”——索引速度、查询延迟、召回精度,三者只能选两个。更残酷的是,当你数据量突破百万级,连选两个都变得奢侈。二、Faiss索引选型:别被“默认参数”骗了很多人第一次用Faiss,直接faiss.IndexFlatL2一把梭。这个索引叫“暴力搜索”,名字很诚实——它就是把所有向量挨个比一遍。100万条128维向量,单次查询耗时约30ms,看起来还行?但注意,这是单线程。如果你的QPS是1000,CPU直接打满,延迟飙到秒级。这里踩过坑:我见过有人把IndexFlatL2用在千万级数据上,理由是“精度最高”。没错,精度是100%,但代价是索引构建时间几乎为零(因为根本不需要构建),查询时间线性增长。当数据量超过500万,这个方案基本不可用。