涉及到选型,当前有很多解决方案,如京东的vearch,支持标量+向量检索(多种相似算法);商业化产品milvus;单机版本faiss 等。
这里选型还是要结合业务本身的特点,如数据量级,性能要求等等。
对于大型公司,海量向量数据检索,to c 的核心业务场景,如搜索等。通常需要满足以下条件:
1 支持向量+标量混合检索:在向量检索的基础上,支持复杂的标量过滤条件。
2 高过滤比:标量作为过滤条件,有较高的过滤比(大于99%),过滤后候选集大(以外卖商品为例,符合LBS过滤的商品向量候选集仍然超过百万)。
3 高召回率:召回率需要在95%+水平。
4 高性能:在满足高召回率的前提下,检索耗时Tp99控制在20ms以内。
5 数据量:需要支持上亿级别的候选集规模。
这里需要综合考虑业务特点和诉求。vearch 是个分布式同构产品,要么运行在cpu 要么运行在gpu 。有个比较大的弊端,如果运行在gpu上,存储海量的向量数据和基础标量数据会占据较大的空间。当然vearch支持了本地存储,但一定程度上牺牲了性能。
目前综合看下来,比较成熟的方案是美团搜索的方案:https://tech.meituan.com/2024/04/11/gpu-vector-retrieval-system-practice.html
使用 先标量再向量的方式,当高过滤比的时候能极大提升检索性能。从架构上看,本质上类似于elasticsearch + faiss 的组合,es 运行在cpu(通过倒排索引加速filter,极佳设计),faiss运行在gpu(计算复杂,追求性能)
不足之处暂时未实现实时标量 + 向量数据的写入。从架构上实现也不是很复杂。类似es 在线写入流程。
整体自研工程量还是较大。综合成本和性能来看,美团的方案从架构上成本和性能应该都更优一些。