跳至内容

Faiss、Elasticsearch 与 Milvus 选型

Faiss、Elasticsearch 与 Milvus检索方案的差异、选择条件与维护成本。

  • 向量检索
  • 全文检索
  • Faiss
  • Elasticsearch
  • Milvus

Faiss 是程序内的向量检索库,Elasticsearch(ES)是搜索引擎,Milvus 是向量数据库。

1. 核心差异

组件与应用的分工
Faiss向量检索库
同一应用进程
业务代码
函数调用
Faiss 索引 向量索引 · 相似度搜索 索引保存与读取
Elasticsearch搜索引擎
应用进程
网络请求
Elasticsearch 服务 文档 · 全文与向量检索 过滤 · 排序 · 聚合 单节点 / 集群
Milvus向量数据库
应用进程
网络请求
Milvus 服务 向量与关联字段 · 过滤 · 更新 BM25 与混合检索按配置启用 Standalone · 单机服务
Distributed · 多节点集群
Lite 为本地嵌入方式,无需独立服务。
应用还需处理
原文、业务字段与 ID 映射 字段过滤与索引更新
编写业务查询 同步原始数据与检索数据
编写业务查询 同步原始数据与检索数据
应用自行生成并写入向量时,原文修改后也要更新对应向量。

ES 支持全文、向量与混合检索,Milvus 支持 BM25 全文检索及其与向量检索的融合。仅凭“需要混合检索”,无法在 ES 与 Milvus 之间作出选择。

2. 选型依据

适用条件
把向量索引
嵌入已有程序
Faiss
原文和业务字段已有存储方案;字段过滤、索引更新与服务接口由应用实现。
全文与向量检索
排序与聚合
Elasticsearch
业务仍依赖全文查询、排序或聚合。已有 ES 集群时,可在现有系统中增加向量检索。
以向量检索为主
需要持久化与增删改
Milvus
数据库保存向量与字段,提供过滤和增删改。Standalone 为单机服务;需要多节点扩容时,使用 Distributed 集群。

ES 与 Milvus 并用时,还要维护两套系统之间的文档 ID 对应、更新删除同步和结果融合。新增系统带来的功能或性能收益,需要与这部分维护成本一起比较。

3. 性能与成本

开发与运行成本
比较维度FaissElasticsearchMilvus
应用开发应用管理原文与字段保存向量 ID 与原文的对应关系,编写过滤和更新逻辑。内置文档存储与查询已有 ES 时,增加向量字段及写入、查询逻辑。向量与字段一起存储数据库提供持久化、字段过滤、更新和删除接口。
部署运维无需独立数据库服务直接在程序内运行。对外提供检索接口时,需自行维护服务。需要部署 ES 服务自建需管理节点、分片与副本;已有集群可复用。维护单机服务或集群Standalone 为单机服务,Distributed 为多节点集群;Lite 本地嵌入,无需独立服务。
调用开销无客户端网络往返应用在进程内直接调用 Faiss。网络与服务处理开销应用通过客户端向 ES 服务发送查询请求。网络与服务处理开销适用于 Standalone、Distributed;Lite 为本地访问。
多节点扩容自行搭建分布式服务索引分片与请求分发由应用安排。内置分片与副本仍需规划分片、节点资源和数据分布。Distributed 支持多节点需维护多节点组件与资源配置。
检索速度与资源用量三者没有固定高低,需在相同数据、硬件和目标召回率下比较。

进程内调用省去了网络往返,整体检索速度仍受索引、向量维度、度量、过滤条件与并发量影响。 成本比较还应包含索引构建、数据更新、向量生成和原文读取。

全文、语义与混合检索的效果,需要由实际查询能否找到相关文档判断;向量近邻召回率不能替代这项评价。托管服务则需要另计费用,并核对所需功能是否包含在内。

4. 选择建议

  • Faiss:嵌入程序的向量检索库。 原文、业务字段和服务接口由应用管理,适合已有数据管理方案、需要直接调用向量索引的程序。
  • Elasticsearch:支持向量检索的搜索引擎。 还需要全文查询、排序或聚合时,优先考虑;已有 ES 集群可复用。
  • Milvus:管理向量数据的数据库。 以向量检索为主,需要持久化、字段过滤和增删改时,优先考虑;支持单机服务与多节点集群。

评论

使用 GitHub 登录后参与讨论,评论将公开保存在 GitHub。

阅读到这里时加载评论。