1. 页面概览
多源接入页(/gotham/ingestion)把外部数据灌入 Gotham 融合图:支持 file_csv/file_json/database/manual 四类数据源,配置「连接 + 映射(节点型/边型)+ 清洗」三段式,运行后异步导入生成融合实体,进度经 SSE 实时推送,批次可暂停/恢复。一句话总结:本页是情报多源数据的采集、清洗、融合入库入口(TAD-02)。
2. 访问入口
2.1 路由与菜单
path /gotham/ingestion、name GothamIngestion、title Gotham 多源接入,挂在父路由 /gotham(GothamLayout)下,侧边栏菜单项「多源接入」。源码 action/web/src/views/GothamIngestionPage.vue。
2.2 认证与权限
子路由 meta requiresAuth: true;请求经 gothamClient.js 附带 aip_token,401 用 gotham_refresh_token 自动换新。
2.3 端口与 API 前缀
Gotham 后端 18083,前缀 /gotham-api(baseURL /gotham-api/v1,Vite 代理重写为 /api/v1)。
3. 界面布局
Gotham 多源接入 [刷新]
[操作结果提示 alert(可关闭)]
创建/编辑数据源卡:基础字段 → 连接配置(表单|JSON 切换)
→ 映射配置(节点|边切换)→ 清洗规则(启用+策略+预设
+规则表:序号|类型|字段|参数|上移/下移/编辑/删除 + JSON 兜底)
[创建数据源/保存修改][取消编辑]
数据源列表 | 导入批次(过滤/状态/进度条/暂停/继续/详情) | 融合实体
[清洗规则编辑弹窗(类型/字段/类型专属参数)]
[运行结果弹窗(Batch #id 运行摘要)]
- 数据源表单:基础字段 + 连接/映射/清洗三段;连接与映射有「表单编辑 / 直接编辑 JSON」双模式。
- 清洗规则:可视化规则表(序号/类型/目标字段/参数/操作),支持上移、下移、编辑单条、删除单条;顺序即后端执行顺序。下方保留 JSON 兜底(可视化编辑自动同步,手改 JSON 后点「从 JSON 解析到列表」生效)。
- 数据源列表:行内「编辑/运行/删除」。
- 导入批次:运行中展示进度条(SSE 推进),可暂停/继续。
- 融合实体:展示已入图实体与解析归属。
4. 交互元素
| 控件 | 位置 | 含义与作用 |
|---|---|---|
| 输入「名称 name *」「显示名」「来源类型」 | 基础字段 | name 全局唯一、编辑不可改;来源类型 file_csv/file_json/database/manual,编辑不可改 |
| 切换「表单编辑 / 直接编辑 JSON」 | 连接/映射区 | 表单按 source_type 展开字段;JSON 兜底,切换时自动序列化 |
| 单选「节点型/边型」 | 映射配置 | node:node_type/id_field/label_field/property_fields;edge:edge_type/source_field/target_field/target_type |
| 勾选「启用清洗」+ 错误策略 + 预设按钮 | 清洗规则 | 预设按钮(去除首尾空格/空值统一/日期标准化/手机号规整/全角转半角/正则替换/枚举映射)打开规则弹窗,填类型/字段/类型专属参数后加入列表 |
| 规则表「上移 / 下移 / 编辑 / 删除」 | 清洗规则列表 | 上移下移调整数组下标(=执行顺序,fusion/cleaning.go:86);编辑弹窗复用同一表单(regex_replace 填 pattern/replacement、enum_map 填 dict JSON);删除即从数组移除,改动实时同步进 rules JSON |
| 按钮「创建数据源」/「保存修改」/「取消编辑」 | 表单底部 | 校验 name 必填、JSON 合法后 POST/PUT |
| 按钮「运行」 | 数据源列表 | 确认后 POST /ingestion/sources/:id/run,返回 running 批次并开 SSE 订阅 |
| 按钮「暂停」/「继续」 | 导入批次 | 对 running 批次暂停、对 paused 批次恢复 |
| 按钮「详情」 | 导入批次 | 弹窗展示 total_records/imported_records/failed_records/error_log |
| 下拉「按数据源过滤」 | 导入批次 | ?source_id= 过滤批次,默认「全部数据源」 |
5. 后端关联
端点表(源码 action/products/gotham/server/server.go,处理器 handlers_ingestion.go):
| 方法 | 路径 | 用途 |
|---|---|---|
| GET/POST | /ingestion/sources、/ingestion/sources/:id(GET/PUT/DELETE) | 数据源增删改查 |
| PUT | /ingestion/sources/:id | 更新数据源(含清洗规则整体覆盖){display_name, description, connection_config, mapping_config, cleaning_config, status, enabled};name/source_type 不可改 |
| POST | /ingestion/sources/:id/run | 启动异步导入,立即返回 running 批次 |
| GET | /ingestion/batches | 批次列表(?source_id= 过滤) |
| GET | /ingestion/batches/:id/progress | SSE 进度流(text/event-stream) |
| POST | /ingestion/batches/:id/pause、/resume | 暂停/断点恢复 |
| GET | /ingestion/entities | 融合实体列表(?limit=100) |
- 异步导入:
run返回批次后后端 goroutine 执行,前端经 SSE 订阅{status, processed, total, batch_id}推进进度;终态(completed/failed)自动刷新批次。 - SSE 实现:EventSource 不能带 Authorization 头,故前端用
fetch+ReadableStream(/gotham-api/v1/ingestion/batches/:id/progress,Bearer 头)按\n\n切帧解析data:行;卸载时abort全部流。 - 三段配置:
connection_config按 source_type 组装(file_csv=path/delimiter,file_json=path,database=连接器参数+SQL,manual=records);mapping_config节点/边二选一;cleaning_config含error_strategy(skip/strict/tolerant)与规则。 - 批次状态:running/success/partial/failed/paused;删数据源保留历史批次与实体。
- 清洗规则契约(
fusion.CleaningConfig,fusion/cleaning.go:48-61):cleaning_config = {rules:[{type, field, pattern?, replacement?, dict?}], error_strategy}。rules为有序数组,后端applyCleaning按for i, rule := range config.Rules依次对同一行执行(cleaning.go:86-99),故数组顺序即执行顺序、同字段可叠加多条规则。7 种type与常量一一对应(cleaning.go:38-46):trim / nullify_empty / date_iso / phone / fullwidth_to_halfwidth / regex_replace / enum_map;error_strategy取 strict | skip | tolerant(cleaning.go:31-35,默认 skip)。 - 清洗配置保存语义:
UpdateSourceRequest.CleaningConfig为指针(fusion/service.go:103),非 nil 时整段覆盖(service.go:365-367);前端在勾选「启用清洗」时始终提交整份cleaning_config(含空rules),以便真正清除已有规则——取消勾选则不发该字段(后端保留原值,规则不会被清掉)。
6. 权限与安全
- 页面全部接口受 JWT 保护,无公开端点。
- database 源口令为密码框;后端连接器有 allow-list(默认 MYSQL/SQLSERVER/POSTGRESQL,SQLITE 需显式授权)。
- 导入结果落融合实体表并经
resolved_entity_id关联图实体,供解析作业消费。
7. 常见问题与排错
- 运行后批次一直 running 且进度条不动:批次 running,但进度长期为 0;原因是 SSE 流未建立(token 缺失/网络中断),或导入阻塞;处理:看 Network 中
/gotham-api/v1/ingestion/batches/:id/progress是否 200 且有 data 帧;401 重新登录。 - 保存提示「connection_config / mapping_config JSON 不合法」:点创建/保存直接报错;原因是 JSON 模式下格式非法,或 manual 源 records 非合法 JSON 数组;处理:切回「表单编辑」重填,或用工具校验 JSON 后重存。
- 编辑时名称/来源类型置灰无法修改:编辑时 name 与 source_type 输入框禁用;原因是后端不可修改这两项(编辑仅提交显示名/描述/连接/映射/清洗);处理:属预期行为;改名需删除重建。
- 暂停后「继续」按钮不出现:暂停后按钮仍为「暂停」或不可操作;原因是暂停为异步请求,批次状态未落库 paused;处理:点「刷新」重拉批次列表;确认后端返回
{paused:true}。 - 删掉全部清洗规则并保存后,规则仍然生效:勾选「启用清洗」→ 删除全部规则 → 保存,下一次运行时旧规则仍在起作用;原因是多半取消了「启用清洗」勾选再保存——此时前端不发送
cleaning_config,后端按「nil=保留原值」保留旧规则(fusion/service.go:365-367);处理:保持「启用清洗」勾选(rules 可为空数组)再保存一次,空rules会整段覆盖清空。页内规则区下方已常驻此提示。 - 调整规则顺序后运行结果变了:上移/下移某条规则后,导入数据与之前不同;原因是
rules是有序数组,后端按下标顺序对同一行依次执行(fusion/cleaning.go:86),同一字段叠加多条规则时顺序会改变结果;处理:属预期行为,按业务需要的执行次序排列即可。
8. 已知缺陷与边界
| 项 | 说明 |
|---|---|
| 名称与类型不可改 | 编辑态 name/source_type 禁用,仅重建 |
| 删除保留数据 | 删数据源不删历史批次与融合实体 |
| SSE 弱网易断 | 连接中断需手动刷新恢复进度 |
| 清洗规则可视化编辑 | 已支持列表化增删改 + 上移/下移排序(数组顺序=执行顺序,2026-09-13 补齐);JSON 兜底仍在,可视化编辑与 JSON 单向同步(手改 JSON 后需点「从 JSON 解析到列表」) |
| 清洗规则无法在不启用时清除 | 后端 cleaning_config=null 表示保留原值,故清除规则须保持「启用清洗」勾选后保存空 rules;取消勾选保存只改不回退 |
注:编辑回填密码明文已于 2026-09-06 修复(编辑态密码留空、沿用原密码,不覆盖)。