涵盖 MySQL 关系数据库、Elasticsearch/Infinity 文档存储、索引结构及核心代码映射
| 存储层 | 引擎 | 用途 | 数据特点 |
|---|---|---|---|
| MySQL / OceanBase / PostgreSQL | Peewee ORM | 元数据、配置、用户、对话等结构化关系数据 | 支持事务、JOIN、外键级联 |
| Elasticsearch / OpenSearch | 自定义 DocStoreConnection | Chunk 全文检索 + 向量检索 + 融合排序 | HNSW 向量索引、BM25 全文、scripted_sim 相似度 |
| Infinity | 自定义 DocStoreConnection | Chunk 存储 + 元数据(替代 ES 的可选方案) | 支持 HNSW、BMP、全文分析器、二级索引 |
这是系统的核心检索数据层,所有文档解析后的 Chunk 都存储在这里。
| 引擎 | 命名规则 | 示例 |
|---|---|---|
| Elasticsearch / OpenSearch | ragflow_{tenant_id}(每租户一个索引,所有 KB 共享) | ragflow_abc123 |
| Infinity | ragflow_{tenant_id}_{kb_id}(每知识库一个子表) | ragflow_abc123_kb456 |
id — varchar, Chunk 唯一标识 (xxhash)doc_id — varchar, 所属文档 IDkb_id — varchar, 所属知识库 ID(二级索引)mom_id — varchar, 父 Chunk IDmom — varchar, 父 Chunk 内容create_time — varchar, 创建时间create_timestamp_flt — float, 创建时间戳img_id — varchar, 关联图片 IDdocnm — varchar, 文档名称(全文索引:rag-coarse + rag-fine)name_kwd — varchar, 文档名关键词(whitespace-# 分析器)tag_kwd — varchar, 标签关键词(whitespace-# 分析器)important_kwd_empty_count — integer, 重要关键词空计数important_keywords — varchar, 重要关键词(全文索引:rag-coarse + rag-fine)questions — varchar, 问题列表(全文索引:rag-coarse + rag-fine)content — varchar, 核心内容(全文索引:rag-coarse + rag-fine)authors — varchar, 作者信息(全文索引:rag-coarse + rag-fine)page_num_int — varchar, 页码top_int — varchar, 页面顶部位置position_int — varchar, 位置信息 [page, top, bottom, left, right]weight_int — integer, 整型权重weight_flt — float, 浮点权重chunk_order_int — integer, Chunk 排序rank_int — integer, 排名分数(整型)rank_flt — float, 排名分数(浮点)available_int — integer, 可用标志(1=可用, 0=禁用, 二级索引)knowledge_graph_kwd — varchar, 知识图谱数据(graph/subgraph/etc)entities_kwd — varchar, 实体关键词(whitespace-# 分析器)pagerank_fea — integer, PageRank 分数tag_feas — varchar, Tag 特征向量(rankfeatures 分析器)from_entity_kwd — varchar, KG 关系源实体to_entity_kwd — varchar, KG 关系目标实体entity_kwd — varchar, KG 实体entity_type_kwd — varchar, KG 实体类型source_id — varchar, 来源 ID(数据连接器)n_hop_with_weight — varchar, N-hop 带权重mom_with_weight — varchar, 父 Chunk 带权重removed_kwd — varchar, 删除标记(whitespace-# 分析器)doc_type_kwd — varchar, 文档类型(如 "image")toc_kwd — varchar, 目录标记("toc")raptor_kwd — varchar, RAPTOR 标记raptor_layer_int — integer, RAPTOR 层级extra — varchar, 扩展字段q_{dim}_vec — vector(float), 嵌入向量(动态维度, HNSW 索引)| 引擎 | 索引类型 | 参数 | 相似度 |
|---|---|---|---|
| Elasticsearch | HNSW | M=16, ef_construction=50 | cosine |
| Infinity | HNSW (LVQ 编码) | M=16, ef_construction=50, encode=lvq | cosine |
| OpenSearch | HNSW | M=16, ef_construction=50 | cosine |
| 文件 | 功能 |
|---|---|
rag/nlp/search.py | Dealer 类 — 核心检索、Chunk 增删改查 |
common/doc_store/doc_store_base.py | 文档存储抽象基类 (MatchDenseExpr, FusionExpr, OrderByExpr) |
common/doc_store/es_conn_base.py | ES 连接、索引创建、CRUD 操作 |
common/doc_store/infinity_conn_base.py | Infinity 连接、表创建、向量索引、全文索引 |
conf/mapping.json | ES Chunk 索引映射(动态模板:*_int, *_flt, *_tks, *_kwd) |
conf/infinity_mapping.json | Infinity Chunk 表 schema(44 字段定义) |
存储用户自定义的文档级元数据字段,为检索时按元数据过滤提供数据支撑。
| 字段 | 类型 | 索引 | 说明 |
|---|---|---|---|
id | keyword (ES) / varchar (Infinity) | ✅ 二级索引 | 文档 ID,主键 |
kb_id | keyword (ES) / varchar (Infinity) | ✅ 二级索引 | 知识库 ID |
meta_fields | object / JSON | dynamic: true | 用户自定义键值对 |
| 引擎 | 命名 | 示例 |
|---|---|---|
| ES | ragflow_doc_meta_{tenant_id} | ragflow_doc_meta_abc123 |
| Infinity | ragflow_doc_meta_{tenant_id} | ragflow_doc_meta_abc123 |
| 文件 | 功能 |
|---|---|
api/db/services/doc_metadata_service.py | DocMetadataService — 元数据 CRUD、push-down 过滤、批量更新 |
common/metadata_utils.py | meta_filter() 内存过滤、apply_meta_data_filter() 统一入口 |
conf/doc_meta_es_mapping.json | ES 元数据索引映射 |
conf/doc_meta_infinity_mapping.json | Infinity 元数据表 schema |
用于 Agent 的 Memory 功能,存储对话历史消息,支持检索增强记忆。
| 字段 | 类型 | 说明 |
|---|---|---|
id | varchar | 消息唯一 ID |
message_id | integer | 消息序号 |
message_type_kwd | varchar | 消息类型 |
source_id | integer | 来源 Memory ID |
memory_id | varchar | Memory 实例 ID |
user_id | varchar | 用户 ID |
agent_id | varchar | Agent ID |
session_id | varchar | 会话 ID |
valid_at / valid_at_flt | varchar/float | 有效期起始 |
invalid_at / invalid_at_flt | varchar/float | 有效期截止 |
forget_at / forget_at_flt | varchar/float | 遗忘时间 |
status_int | integer | 消息状态 |
zone_id | integer | 时区 ID |
content | varchar | 消息内容(全文索引:rag-coarse + rag-fine) |
| 文件 | 功能 |
|---|---|
api/db/services/memory_service.py | MemoryService — Memory CRUD、消息管理 |
conf/message_infinity_mapping.json | Infinity 消息表 schema |
存储 Agent Canvas 中的 Skill 组件定义。
| 文件 | 功能 |
|---|---|
conf/skill_es_mapping.json | ES Skill 索引映射 |
conf/skill_infinity_mapping.json | Infinity Skill 表 schema |
用途:用户账号、认证、偏好设置。
存储逻辑:标准 MySQL 表,密码为哈希存储,email 唯一约束。is_authenticated/is_active/is_anonymous 用于 Flask-Login 集成。to_safe_dict() 方法在序列化时自动脱敏(隐藏 password, access_token)。
服务层:api/db/services/user_service.py — UserService (CRUD, 密码管理, 角色检查)
用途:租户/工作空间,每个用户可以属于多个租户。
存储逻辑:记录租户级别的默认 LLM 模型配置(embedding、chat、ASR、img2txt、rerank、tts)。parser_ids 存储该租户可用的文档处理器列表。通过 UserTenant 表与用户多对多关联。
服务层:api/db/services/user_service.py — UserTenantService (租户管理), api/db/services/tenant_llm_service.py
用途:用户-租户多对多关联表。
存储逻辑:每个关联记录包含角色 (role) 和邀请人 (invited_by),支持租户内的权限控制。
服务层:api/db/services/user_service.py — UserTenantService
用途:租户邀请码管理。
用途:LLM 厂商注册表(OpenAI, Qwen, DeepSeek, etc.)。
存储逻辑:系统预置数据(conf/llm_factories.json)。每个厂商下可有多个 LLM 模型。
用途:LLM 模型定义表(系统预置 + 厂商提供)。
存储逻辑:复合主键 (fid, llm_name)。每个模型归属于一个 llm_factories。tags 字段包含能力标签 (Chat, 32k, tool等)。
服务层:api/db/services/llm_service.py — LLMService
用途:租户级别的 LLM 配置实例(含 API Key)。
存储逻辑:同一租户+厂商+模型名唯一。存储用户自己的 API Key、API Base URL 和 token 使用量。
服务层:api/db/services/tenant_llm_service.py — TenantLLMService (模型CRUD, token统计)
用途:Langfuse 观测平台集成配置。
用途:知识库/数据集核心元数据表。
存储逻辑:记录知识库的配置参数(相似度阈值、向量权重、解析器、pipeline)、统计信息(文档数、token数、chunk数)以及图RAG/RAPTOR/思维导图的任务状态。对应的 Chunk 数据存储在 ES/Infinity 中。
服务层:api/db/services/knowledgebase_service.py — KnowledgebaseService (KB CRUD, 权限检查, 统计)
用途:文档元数据表,记录文档的处理状态和统计。
存储逻辑:一个文档属于一个 KB。文档有处理流水线状态 (run=1/2)、进度 (progress)、耗时 (process_duration)。content_hash 用于检测文档内容变更。文档元数据 (自定义字段) 存储在 ES/Infinity 中而非此表。
服务层:api/db/services/document_service.py — DocumentService (文档CRUD、状态管理、批量操作)
用途:文件管理系统中的文件和文件夹记录。
存储逻辑:树形结构通过 parent_id 实现文件夹嵌套。
服务层:api/db/services/file_service.py — FileService
用途:文件与文档的多对多映射。
存储逻辑:一个文件可能对应多个文档(如 PDF 拆分),反之亦然。
服务层:api/db/services/file2document_service.py — File2DocumentService
用途:文档处理任务队列(解析、分块、向量化等)。
存储逻辑:队列式处理,按优先级调度。from_page/to_page 指定处理页面范围。progress/progress_msg 记录实时进度。
服务层:api/db/services/task_service.py — TaskService (任务CRUD, 队列调度)
用途:对话应用配置(Chat/Dialog 配置)。
存储逻辑:JSON 字段存储 LLM 设置 (temperature, top_p 等)、prompt 模板(system prompt, prologue, empty_response)、知识库关联 (kb_ids)。meta_data_filter 存储元数据过滤配置。
服务层:api/db/services/dialog_service.py — DialogService (对话应用CRUD、async_ask)
用途:对话会话记录。一个 Dialog 可以有多个 Conversation。
存储逻辑:message 为 JSON 数组存储完整对话历史。reference 为 JSON 存储引用 Chunk 信息。
服务层:api/db/services/conversation_service.py — ConversationService (会话管理, 消息追加)
用途:API 授权 Token 管理。
服务层:api/db/services/api_service.py — APITokenService
用途:API 方式调用的对话会话(外部 API 集成场景)。
存储逻辑:相比 conversation 多了统计字段 (tokens, duration, round, thumb_up)、dsl 状态快照和版本追踪。
服务层:api/db/services/conversation_service.py — API4ConversationService
用途:Agent Canvas 画布(可视化工作流设计)。
存储逻辑:dsl 为 JSON 存储完整的画布定义(节点、连线、组件配置)。canvas_category 区分 agent_canvas 和 dataflow_canvas。
服务层:api/db/services/canvas_service.py — UserCanvasService
用途:Canvas 模板(系统预置 + 用户自定义)。
存储逻辑:支持多语言标题/描述 (title, description 为 JSON 字典)。
用途:Canvas 版本管理,允许回滚到历史版本。
用途:MCP (Model Context Protocol) 服务器配置。
服务层:api/db/services/mcp_server_service.py — MCPServerService
用途:Search App 配置(纯检索型应用)。
存储逻辑:类似 Dialog 但更轻量,专注于检索配置。通过 search_config JSON 存储全部参数。
服务层:api/db/services/search_service.py — SearchService
用途:Pipeline 处理操作日志。
服务层:api/db/services/pipeline_operation_log_service.py
用途:外部数据连接器(OneDrive, Google Drive, Web, IM 等)。
服务层:api/db/services/connector_service.py — ConnectorService
用途:RAG 评测系统,管理测试数据集、测试用例、评测运行和结果。
服务层:api/db/services/evaluation_service.py — EvaluationService
用途:Agent Memory 实例配置(元数据层面,消息内容存 ES/Infinity)。
存储逻辑:memory_type 为位标志(1=raw, 2=semantic, 4=episodic, 8=procedural)。forgetting_policy 支持 LRU/FIFO。memory_size 限制消息条数。
服务层:api/db/services/memory_service.py — MemoryService
服务层:api/db/services/system_settings_service.py, api/db/services/connector_service.py
ragflow_{tenant_id}) ==⟨ documentragflow_doc_meta_{tenant_id})ragflow_message_*)| MySQL 表 | 服务类 | 服务文件 |
|---|---|---|
| user | UserService | api/db/services/user_service.py |
| tenant | UserTenantService | api/db/services/user_service.py |
| user_tenant | UserTenantService | api/db/services/user_service.py |
| llm_factories, llm | LLMService | api/db/services/llm_service.py |
| tenant_llm | TenantLLMService | api/db/services/tenant_llm_service.py |
| tenant_langfuse | TenantLangfuseService | api/db/services/langfuse_service.py |
| knowledgebase | KnowledgebaseService | api/db/services/knowledgebase_service.py |
| document | DocumentService | api/db/services/document_service.py |
| file | FileService | api/db/services/file_service.py |
| file2document | File2DocumentService | api/db/services/file2document_service.py |
| task | TaskService | api/db/services/task_service.py |
| dialog | DialogService | api/db/services/dialog_service.py |
| conversation, api_4_conversation | ConversationService / API4ConversationService | api/db/services/conversation_service.py |
| api_token | APITokenService | api/db/services/api_service.py |
| user_canvas | UserCanvasService | api/db/services/canvas_service.py |
| user_canvas_version | UserCanvasVersionService | api/db/services/user_canvas_version.py |
| mcp_server | MCPServerService | api/db/services/mcp_server_service.py |
| search | SearchService | api/db/services/search_service.py |
| pipeline_operation_log | PipelineOperationLogService | api/db/services/pipeline_operation_log_service.py |
| connector, connector2kb | ConnectorService | api/db/services/connector_service.py |
| evaluation_* | EvaluationService | api/db/services/evaluation_service.py |
| memory | MemoryService | api/db/services/memory_service.py |
| system_settings | SystemSettingsService | api/db/services/system_settings_service.py |
| 存储对象 | 管理类/文件 | 服务接口 |
|---|---|---|
| Chunk | rag/nlp/search.py — Dealer | retrieval(), search(), chunk_list(), insert(), delete() |
| DocMetadata | api/db/services/doc_metadata_service.py — DocMetadataService | get/insert/update/delete/batch_update/filter_doc_ids |
| Messages (Memory) | api/db/services/memory_service.py | 消息存储与检索 |
所有 MySQL 表通过 DataBaseModel → BaseModel 继承以下自动管理字段:
| 字段 | 类型 | 说明 | 自动行为 |
|---|---|---|---|
create_time | BigIntegerField | 创建时间戳 (秒) | insert() 时自动设置为 current_timestamp() |
create_date | DateTimeField | 创建日期 | 由 create_time 自动推导 |
update_time | BigIntegerField | 更新时间戳 (秒) | 每次 update/insert 自动更新为 current_timestamp() |
update_date | DateTimeField | 更新日期 | 由 update_time 自动推导 |
自定义字段类型:
| 类型 | MySQL存储 | 说明 |
|---|---|---|
JSONField | LONGTEXT / TEXT | 自动序列化为 JSON 字符串,读取时反序列化 |
ListField | LONGTEXT / TEXT | JSONField 子类,默认值为 [] |
SerializedField | LONGTEXT / TEXT | 支持 PICKLE 或 JSON 序列化 |
DateTimeTzField | VARCHAR(255) | ISO 8601 带时区的日期时间字符串 |
| 引擎 | 连接池类 | 迁移器 | 分布式锁 |
|---|---|---|---|
| MySQL | RetryingPooledMySQLDatabase | MySQLMigrator | MysqlDatabaseLock (GET_LOCK) |
| OceanBase | RetryingPooledOceanBaseDatabase | MySQLMigrator | MysqlDatabaseLock (GET_LOCK) |
| PostgreSQL | RetryingPooledPostgresqlDatabase | PostgresqlMigrator | PostgresDatabaseLock (pg_advisory_lock) |
| Elasticsearch | ESConnection (elasticsearch-py) | N/A | N/A |
| Infinity | InfinityConnection (infinity-sdk) | N/A | N/A |
所有 SQL 数据库通过 RetryingPooled*Database 自动支持连接断开重试(最多 5 次,指数退避:1s→2s→4s→8s→16s)。
所有服务层方法通过 @with_retry 装饰器和 @DB.connection_context() 管理连接生命周期。