You need to enable JavaScript to run this app.
导航
多模检索
最近更新时间:2025.04.22 20:22:31首次发布时间:2025.04.22 20:22:31
我的收藏
有用
有用
无用
无用

场景描述

对于多模数据的场景中,尤其是同时包含文本及图像、视频的场景,在业务场景中会需要对数据进行多个维度的检索:

  1. 对于标签类型,根据标签的数值,对标签列进行快速的过滤搜索,得到精确的搜索结果
  2. 对于文本类型,根据某些关键字,对文本字段进行全文检索,搜索最相近的文本描述
  3. 对于图像、文本类型,先对该字段进行Embedding操作,得到新的向量字段,然后通过向量搜索,得到最接近的列。

这三类检索模型,有些场景是相互独立,即只使用其中一种检索模型,而有些场景中,会同时对这3路进行搜索得到最近相似的结果。这就要求我们的数据方案,能够满足以下要求:

  1. 存储方案拥有分布式能力,随着数据量的增长,系统能够水平扩容
  2. 存储方案拥有标签过滤,全文检索,向量搜索的能力,最好单一引擎能支持这3种方案。

当前方案

Image
当前方案中,一般图像数据单独存储在对象存储,标签和文本数据存储在数据库中。
全文索引的数据一般会存储在ES中,向量数据一般会存储在专门的向量数据库中。
ES中可以完成标签检索和全文检索,向量数据库完成向量检索和标签检索。
如果需要三路检索,则需要同时查询ES和向量数据库。

Lance方案

Image
多模数据和标签一起存储在Lance数据集之中。直接在Lance的文本类型之上构建全文索引。向量字段也能够直接存储在Lance之上,而且有多种向量索引算法,能够快速的完成向量搜索。

方案对比

维度

当前方案

Lance方案

数据成本

  • 索引采用ES或者向量数据库存储,更偏向实时场景,存储成本非常高
  • 全部采用湖存储,数据存储在对象存储上,成本比较低。

数据处理

  • 索引使用ES、VectorDB,一般采用自己的SDK访问,分布式能力在引擎内部。
  • 数据使用对象存储SDK访问。
  • 采用的统一的SDK访问,既支持pylance单机sdk,也支持式spark、ray等分布式框架

扩展性

  • 采用数仓架构,扩展性容易达到瓶颈
  • 采用数据湖架构,能够达到更大的扩展

易用性

  • 多份数据,需要处理多个系统间的数据一致性
  • 数据和元数据分离,操作数据时需要额外处理
  • 全部数据在一份Lance数据上,极简维护