agentic_huge_data_base / wiki
页面 RAGFlow · 2.3 文档引擎选择·DeepWiki 中文全文译文

2.3 · 文档引擎选择(Document Engine Selection)

复杂文档理解与引用检索 · 聚焦本章的模块关系、源码依据与实现要点。

项目RAGFlow 章节2.3 状态全文译文 模块安装与启动、测试、发布与运维、配置治理、文档对象与元数据
源码线索
  • .github/workflows/release.yml
  • .github/workflows/tests.yml
  • Dockerfile
  • Dockerfile.deps
  • api/db/joint_services/memory_message_service.py
  • api/db/joint_services/user_account_service.py
  • api/db/services/doc_metadata_service.py
  • common/doc_store/es_conn_base.py
  • common/doc_store/infinity_conn_base.py
  • common/doc_store/ob_conn_base.py
模块标签
  • 安装与启动
  • 测试、发布与运维
  • 配置治理
  • 文档对象与元数据
  • 系统架构

章节正文

文档引擎选择

文档引擎选择

相关源文件

本章引用的主要源码文件:

  • .github/workflows/release.yml
  • .github/workflows/tests.yml
  • Dockerfile
  • Dockerfile.deps
  • api/db/joint_services/memory_message_service.py
  • api/db/joint_services/user_account_service.py
  • api/db/services/doc_metadata_service.py
  • common/doc_store/es_conn_base.py
  • common/doc_store/infinity_conn_base.py
  • common/doc_store/ob_conn_base.py
  • common/doc_store/ob_conn_pool.py
  • common/settings.py
  • conf/infinity_mapping.json
  • conf/mapping.json
  • docker/docker-compose-base.yml
  • docker/infinity_conf.toml
  • download_deps.py
  • helm/values.yaml
  • memory/services/messages.py
  • memory/utils/aggregation_utils.py
  • memory/utils/es_conn.py
  • memory/utils/highlight_utils.py
  • memory/utils/infinity_conn.py
  • memory/utils/ob_conn.py
  • pyproject.toml
  • rag/utils/es_conn.py
  • rag/utils/infinity_conn.py
  • rag/utils/ob_conn.py
  • rag/utils/opensearch_conn.py
  • sdk/python/pyproject.toml
  • sdk/python/uv.lock
  • test/unit_test/memory/utils/test_ob_conn_aggregation.py
  • test/unit_test/memory/utils/test_ob_conn_highlight.py
  • test/unit_test/rag/utils/test_opensearch_doc_meta.py
  • uv.lock

本文档提供了关于如何选择、配置和理解 RAGFlow 所支持的文档引擎的技术指南。文档引擎是 RAGFlow 检索能力的核心,提供了混合搜索(全文搜索 + 向量搜索)和元数据过滤功能。

概述

RAGFlow 通过一个统一接口抽象了文档存储,从而支持多种后端引擎。引擎的选择会影响搜索性能、硬件兼容性(x86 与 ARM)以及资源利用率。引擎的选择主要通过 DOC_ENGINE 环境变量控制,该变量会影响基础设施(Docker Compose 配置文件)和应用逻辑。

数据流与架构

文档引擎位于入库管线(任务执行器)和检索管线(RAGFlow 服务器)之间。

引擎集成图:

RAGFlow · 数据流与架构 · 图 1
RAGFlow · 数据流与架构 · 图 1

来源:helm/values.yaml:13-21rag/utils/es_conn.py:61-62rag/utils/infinity_conn.py:29-30common/doc_store/doc_store_base.py:25-26

支持的引擎及其权衡

引擎DOC_ENGINE适用场景架构状态
Elasticsearchelasticsearch生产环境稳定性,广泛兼容性x86_64, ARM64默认
Infinityinfinity高性能检索增强生成(RAG),低延迟x86_64优化
OpenSearchopensearch兼容 AWS 的部署x86_64, ARM64支持
OceanBaseoceanbase大规模分布式存储x86_64, ARM64支持
SeekDBseekdb专用的 OceanBase 衍生版本x86_64支持

来源:helm/values.yaml:13-21docker/docker-compose-base.yml:1-100

1. Elasticsearch

Elasticsearch 是 RAGFlow 的主要搜索引擎。它使用 ESConnection 类与集群进行交互。

  • 实现:继承自 ESConnectionBase 并实现了单例模式 rag/utils/es_conn.py:61-62
  • 搜索逻辑:通过组合 MatchTextExpr(BM25)和 MatchDenseExpr(向量)来实现混合搜索 rag/utils/es_conn.py:25-25
  • 分页:使用 _search_with_search_after 机制来处理超出 MAX_RESULT_WINDOW(10,000 条命中结果)的深度分页,通过每次迭代 1,000 条记录的方式进行 rag/utils/es_conn.py:31-32rag/utils/es_conn.py:76-140
  • 原子更新:通过专用脚本 _PAGERANK_FEA_ADJUST_SCRIPT 支持对片段反馈的 PageRank 特征进行调整 rag/utils/es_conn.py:36-58

来源:rag/utils/es_conn.py:61-140docker/docker-compose-base.yml:2-34

2. Infinity

Infinity 是专为检索增强生成(RAG)设计的引擎,针对稠密和稀疏向量检索进行了优化。它由 InfiniFlow 开发,并针对 RAGFlow 的工作负载进行了高度优化。

  • 优化:专门处理 RAG 特定字段,如 docnm_kwdtitle_tksimportant_kwd,将它们映射到专用的全文索引(例如 ft_content_rag_coarserag/utils/infinity_conn.py:62-88
  • 字段转换:将应用层字段映射到内部存储字段。例如,important_kwd 在输出字段中被转换为 important_keywords rag/utils/infinity_conn.py:44-59
  • 表管理:对于片段表,它会从标准查询中移除 kb_id 过滤器,因为它利用每个知识库一个表(例如 {indexName}_{kb_id})的分离方式来优化查询性能 rag/utils/infinity_conn.py:155-165
  • 数据映射:模式在 conf/infinity_mapping.json 中定义,支持专用类型如 varchar,并带有多种分析器(rag-coarserag-fine),以及针对低基数(low-cardinality)字段(如 kb_id)的二级索引 conf/infinity_mapping.json:1-43

来源:rag/utils/infinity_conn.py:29-165docker/docker-compose-base.yml:72-97conf/infinity_mapping.json:1-43

3. OpenSearch

OpenSearch 作为 Elasticsearch 的社区驱动替代方案得到支持,特别适用于 AWS 环境。

  • 配置:在 Docker 环境中默认暴露在 9201 端口 docker/docker-compose-base.yml:43-43
  • 部署:使用 opensearchproject/opensearch:2.19.1 镜像,并需要特定的安全插件配置 docker/docker-compose-base.yml:36-70

来源:docker/docker-compose-base.yml:36-70helm/values.yaml:166-191

4. OceanBase 和 SeekDB

OceanBase 提供了一种具有向量搜索能力的分布式关系数据库方法。SeekDB 是用于类似用例的专用版本。

  • 配置:OceanBase 使用端口 2881 docker/docker-compose-base.yml:108-108。SeekDB 也使用端口 2881,并支持特定的内存限制 docker/docker-compose-base.yml:132-136
  • 实现:使用 OBConnection,它定义了一个全面的片段表模式,包括用于内容的 LONGTEXT 类型和用于位置数据的 ARRAY 类型 rag/utils/ob_conn.py:52-99
  • 搜索能力:同时支持原始内容全文搜索(FTS_COLUMNS_ORIGIN)和分词后内容全文搜索(FTS_COLUMNS_TKSrag/utils/ob_conn.py:116-131

来源:docker/docker-compose-base.yml:99-146rag/utils/ob_conn.py:52-131

技术配置

通过部署选择引擎

切换引擎的主要方式是修改 docker/.env 文件或 Helm 的 values.yaml 中的 DOC_ENGINE 变量。

在 Helm 中: values.yaml 中的 DOC_ENGINE 值默认为 infinity,但可以切换为 elasticsearchopensearch helm/values.yaml:13-21

搜索操作数据流(以 Infinity 为例)

下面的时序图连接了“自然语言空间”(搜索请求)和“代码实体空间”(内部类和函数)。

RAGFlow · 搜索操作数据流(以 Infinity 为例) · 图 2
RAGFlow · 搜索操作数据流(以 Infinity 为例) · 图 2

来源:rag/utils/infinity_conn.py:94-125rag/utils/infinity_conn.py:155-173common/doc_store/ob_conn_pool.py:1-20

存储依赖

文档引擎与部署环境中定义的其他存储系统协同工作:

  • MySQL:存储结构化元数据和应用状态。默认端口 3306 docker/docker-compose-base.yml:191-191
  • MinIO:用于原始文档和解析后图片的对象存储。默认 API 端口 9000 docker/docker-compose-base.yml:208-208
  • Redis (Valkey):管理任务队列和任务流。默认端口 6379 docker/docker-compose-base.yml:230-230

来源:docker/docker-compose-base.yml:176-247helm/values.yaml:193-246