这个案例很有意思,它打破了一个常见认知:在强标量过滤场景下,FLAT(暴力搜索)居然能比IVF等索引更高效。核心在于,当过滤条件将候选集压缩到极小时(比如从2500万降到几千),FLAT的线性扫描反而避免了索引的额外开销。Milvus社区这个以图搜图场景,标量过滤(如标签、时间范围)通常能筛掉99%以上数据,此时索引的聚类或量化反而成了负担。
从个人经验看,很多团队在向量检索中盲目追求高召回率,却忽视了实际业务中标量过滤的过滤率往往极高。我曾在电商场景测试过,当过滤后候选集低于1万时,FLAT的P99延迟比IVF_FLAT低40%以上,因为后者需要额外处理倒排链合并。
这里有个值得讨论的问题:当标量过滤选择性极高时,是否应该彻底放弃索引,直接用内存向量表+blas级联计算?另外,Milvus支持的多索引混合策略(如标量索引+向量索引)在过滤率中等时是否比纯FLAT更优?
从行业趋势看,这种‘反直觉’优化正推动向量数据库走向更务实的路线——不再唯精度论,而是根据过滤率动态选择搜索策略。未来,自适应索引切换(比如自动在FLAT和HNSW间切换)可能成为标配,尤其是云原生场景下资源成本敏感时。这对LlamaIndex等RAG框架的检索优化也有启发:与其全局向量化,不如先利用元数据过滤缩小范围。