SmartPagerankSearch / CSV_IMPORT_FEATURE.md
GitHub Action
Sync from GitHub Actions (Clean Commit)
7f22d3c
# CSV批量导入功能
## 📋 功能说明
添加了CSV批量导入功能,可以将类似Wiki网站的数据直接从CSV文件批量导入到数据库中,避免重复爬取,极大提高数据导入效率。
## ✅ 已实现的功能
### 1. CSV解析和导入
- ✅ 支持多种CSV格式(UTF-8、Latin-1编码)
- ✅ 自动识别CSV列(title, content, url, category等)
- ✅ 智能字段匹配(不区分大小写)
- ✅ 自动生成URL(如果CSV中没有URL列)
### 2. 批量处理
- ✅ 批量向量化和存储(默认每批50条)
- ✅ 自动独特性检测和晋升到Space R
- ✅ 进度反馈(实时显示导入进度)
### 3. 前端界面
- ✅ CSV文件选择器
- ✅ 密码验证(与URL爬取共用密码)
- ✅ URL前缀配置(可选)
- ✅ 上传状态反馈
### 4. 后端处理
- ✅ 异步后台处理(不阻塞请求)
- ✅ WebSocket实时进度推送
- ✅ 错误处理和日志记录
- ✅ 自动清理临时文件
## 🎯 使用方法
### 步骤 1: 准备CSV文件
CSV文件应包含以下列(列名不区分大小写):
**必需列:**
- `content` / `text` / `body` - 内容文本
**可选列:**
- `title` / `name` / `page` - 标题
- `url` / `link` - URL链接
- `category` / `type` - 分类
**CSV示例:**
```csv
title,content,url,category
"Machine Learning","Machine learning is a subset of artificial intelligence...","https://wiki.example.com/ml","Technology"
"Deep Learning","Deep learning uses neural networks...","https://wiki.example.com/deep-learning","Technology"
"Python Programming","Python is a high-level programming language...","https://wiki.example.com/python","Programming"
```
或者更简单的格式:
```csv
title,content
"Article 1","This is the content of article 1..."
"Article 2","This is the content of article 2..."
```
如果没有URL列,系统会自动生成URL(基于URL前缀和标题)。
### 步骤 2: 上传CSV文件
1. 在前端页面找到"Batch Import (Wiki Style)"区域
2. 点击"选择文件"按钮,选择CSV文件
3. 可选:输入URL前缀(例如:`https://wiki.example.com/page`
4. 输入密码(与URL爬取相同的密码)
5. 点击"批量导入"按钮
### 步骤 3: 查看导入进度
导入过程中,您会看到:
- 实时进度提示(通过WebSocket推送)
- 成功/失败统计
- 自动晋升到Space R的内容数量
## 📊 CSV格式说明
### 支持的列名(不区分大小写)
**内容列**(优先级从高到低):
- `content`
- `text`
- `body`
- `description`
- `abstract`
如果以上列都不存在,系统会尝试组合所有非URL/标题列作为内容。
**标题列**(优先级从高到低):
- `title`
- `name`
- `page`
**URL列**(优先级从高到低):
- `url`
- `link`
- `href`
如果CSV中没有URL列,系统会根据以下规则生成:
- 如果提供了URL前缀:`{url_prefix}/{title_with_underscores}`
- 如果没有URL前缀:`csv_import/{title_with_underscores}``csv_import/{random_id}`
**分类列**
- `category`
- `type`
### 数据要求
- 内容文本长度至少10个字符(太短的会被跳过)
- 支持多行文本(CSV格式中的换行符会被保留)
- 自动清理空值和多余空格
## 🔧 配置说明
### 环境变量
CSV导入功能使用与URL爬取相同的密码验证:
- `CRAWL_PASSWORD` - 在 `.env` 文件中设置
### 导入参数
- **批量大小**:默认50条/批(可在代码中调整)
- **独特性检测**:默认开启,独特内容会自动晋升到Space R
- **URL前缀**:可选,用于生成缺失的URL
## 📝 导入统计
导入完成后,系统会返回统计信息:
```json
{
"total": 100, // 总行数
"processed": 100, // 已处理行数
"success": 95, // 成功导入数
"failed": 5, // 失败数
"promoted": 10 // 晋升到Space R的数量
}
```
## 🔍 错误处理
### 常见错误
1. **密码错误**
- 错误信息:`密码错误,CSV导入被拒绝`
- 解决:检查密码是否正确
2. **文件格式错误**
- 错误信息:`只支持CSV文件格式`
- 解决:确保文件扩展名为`.csv`
3. **编码问题**
- 系统会自动尝试多种编码(UTF-8、Latin-1)
- 如果仍有问题,请将CSV文件转换为UTF-8编码
4. **内容太短**
- 内容少于10个字符的行会被跳过
- 确保每行都有足够的内容
## 💡 使用建议
### 性能优化
1. **批量大小**
- 默认50条/批,适合大多数情况
- 对于大型CSV(>1000行),可以增加到100
2. **URL前缀**
- 建议为不同来源的Wiki设置不同的URL前缀
- 例如:`https://wiki.example.com/page``https://docs.example.com/article`
3. **分类标签**
- 使用`category`列可以帮助后续搜索和过滤
- 统一的分类命名有助于数据管理
### 数据质量
1. **内容清理**
- 导入前建议清理HTML标签(如果CSV中包含)
- 确保内容是可读的纯文本
2. **标题质量**
- 良好的标题有助于生成有意义的URL
- 标题应该是简洁、描述性的
3. **URL唯一性**
- 如果CSV中有URL列,确保URL是唯一的
- 重复的URL可能导致数据覆盖
## 🔒 安全说明
- CSV导入需要密码验证(与URL爬取共用)
- 文件上传后存储在临时目录,处理完成后自动删除
- 建议在生产环境中使用HTTPS
## 📚 相关文件
- `csv_importer.py` - CSV导入核心模块
- `web_server.py` - API端点和后台任务
- `static/index.html` - 前端上传界面
- `system_manager.py` - 数据库存储逻辑
## 🔄 更新日志
### v1.0 (当前版本)
- ✅ 支持多种CSV格式和列名
- ✅ 批量导入和进度反馈
- ✅ 自动独特性检测和晋升
- ✅ 密码验证和安全控制
- ✅ 前端上传界面
## 🚀 后续改进
可能的改进方向:
- [ ] 支持Excel文件导入(.xlsx)
- [ ] 支持JSON格式导入
- [ ] 导入预览功能(上传前预览前几行)
- [ ] 导入历史记录
- [ ] 重复数据检测和去重
- [ ] 自定义字段映射配置