# kgrag 迁移指南

## 概述

本目录包含将 kgrag 图谱系统从旧服务器完整迁移到新服务器的脚本。  
迁移采用**方案A**：迁移高亮PDF文件 + 批量更新 Neo4j 中的溯源 URL。

## 迁移前准备

在执行任何脚本前，先修改各脚本顶部的变量配置区。

### 需要确认的信息

| 信息 | 说明 | 示例 |
|------|------|------|
| 旧服务器 SSH 地址 | 用于 rsync 拉取文件 | `root@192.168.0.46` |
| 旧服务器 APP 目录 | kgrag 部署根目录 | `/app` |
| 新服务器 APP 目录 | 目标部署根目录 | `/app` |
| 旧服务 BASE URL | 写入 Neo4j 的 URL 前缀 | `http://192.168.0.46:59085` |
| 新服务 BASE URL | 迁移后对外服务的 URL 前缀 | `http://192.168.1.100:59085` |
| 旧 Neo4j 连接地址 | 用于导出快照（可选） | `bolt://192.168.0.46:57687` |
| 新 Neo4j 连接地址 | 用于导入和更新 URL | `bolt://localhost:7687` |

---

## 执行步骤

### 步骤 1：迁移文件

在**新服务器**上执行：

```bash
bash 01_copy_files.sh
```

该脚本通过 rsync 从旧服务器拉取：
- `/app/files/`（原始文档）
- `/app/files/uploads_v1/`（高亮注释 PDF，溯源链接的实际目标）
- `/app/kg_output/`（实体关系抽取 JSON）
- `kg_snapshot.json`（全量快照，含 Embedding）
- 所有代码文件

### 步骤 2：重建 Neo4j 图谱

在**新服务器**上执行：

```bash
bash 02_load_neo4j.sh
```

该脚本调用 `batch_kg_build.py --phase load_snapshot` 将 `kg_snapshot.json` 导入新 Neo4j。

> 注意：此方式不保留节点的 `*_timeline` 历史字段。  
> 如需完整历史，改用 `neo4j-admin database dump/load` 做数据库级备份（需停服）。

### 步骤 3：批量更新溯源 URL

在**新服务器**上执行：

```bash
python 03_update_neo4j_urls.py
```

该脚本将 Neo4j 中所有节点 `knowledge_source` 字段里的旧服务器地址替换为新地址。

### 步骤 4：更新配置文件

在**新服务器**上执行：

```bash
bash 04_update_config.sh
```

该脚本更新 `config.py`、`batch_kg_build.py`、`app.py` 中的硬编码 IP 地址。

### 步骤 5：验证迁移结果

在**新服务器**上执行：

```bash
python 05_verify_migration.py
```

该脚本检查文件完整性、Neo4j 节点数量、溯源 URL 可访问性。

---

## 目录结构说明

迁移完成后，新服务器上的文件布局应与旧服务器一致：

```
/app/
├── files/                  # 原始文档（PDF/DOCX/XLSX等）
│   └── uploads_v1/         # 高亮注释 PDF（溯源跳转目标）
├── kg_output/              # 每个文档的实体关系 JSON（断点续跑用）
├── kg_snapshot.json        # 全量图谱快照（重建 Neo4j 的输入）
├── fault_wenjian/          # 超时/失败文件记录
├── entity_registry.json    # 动态实体类型注册表
├── tree_data.json          # 树状结构数据
├── config.py               # 模型/服务地址配置（迁移后需修改）
├── app.py                  # FastAPI 主程序
├── batch_kg_build.py       # 批量图谱构建脚本
├── graph_search/           # 图检索模块
├── kg_build/               # 图谱构建模块
└── ...                     # 其他代码模块
```

---

## 常见问题

**Q：迁移后溯源点击没有跳转到正确页面？**  
A：检查步骤3是否执行成功，确认新服务的 `PREFIX_URL` 与 `NEW_BASE_URL` 一致。

**Q：`01_copy_files.sh` 报 Permission denied？**  
A：确保新服务器已添加旧服务器的 SSH 公钥，或改用密码认证（rsync 会提示输入）。

**Q：`02_load_neo4j.sh` 报模块找不到？**  
A：先在新服务器上安装依赖：`pip install -r requirements.txt`。

**Q：高亮 PDF 文件很多，rsync 很慢？**  
A：可加 `--bwlimit=50000`（限速 50MB/s）避免占满带宽，或分批执行。
