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示例:

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"

或者更简单的格式:

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

📝 导入统计

导入完成后,系统会返回统计信息:

{
  "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/pagehttps://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格式导入
  • 导入预览功能(上传前预览前几行)
  • 导入历史记录
  • 重复数据检测和去重
  • 自定义字段映射配置