From 697047e45cd594b36eb1b0befa244bc345dbbd77 Mon Sep 17 00:00:00 2001 From: tangwang Date: Tue, 2 Dec 2025 18:41:18 +0800 Subject: [PATCH] rm useless doc --- docs/测试数据指南.md | 514 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 file changed, 0 insertions(+), 514 deletions(-) delete mode 100644 docs/测试数据指南.md diff --git a/docs/测试数据指南.md b/docs/测试数据指南.md deleted file mode 100644 index f6f425d..0000000 --- a/docs/测试数据指南.md +++ /dev/null @@ -1,514 +0,0 @@ -# 测试数据构造指南 - SearchEngine - -本文档说明如何构造测试数据,包括两种数据源的准备和导入流程。 - ---- - -## 快速开始 - -### 1. 构造 Mock 数据(tenant_id=1 和 tenant_id=2) - -```bash -./scripts/mock_data.sh -``` - -功能:自动生成 tenant_id=1 的Mock数据,并从CSV导入 tenant_id=2 的数据到MySQL - ---- - -### 2. 从 MySQL → Elasticsearch - -```bash -# 导入 tenant_id=1 的数据(重建索引) -./scripts/ingest.sh 1 true - -# 导入 tenant_id=2 的数据(重建索引) -./scripts/ingest.sh 2 true -``` - - -**用法**:`./scripts/ingest.sh [recreate_index]` -- `tenant_id`: 租户ID(1 或 2) -- `recreate_index`: 是否重建索引(`true`/`false`,默认:`false`) - ---- - -## 完整工作流程 - -```bash -# 1. 构造并导入测试数据到MySQL -./scripts/mock_data.sh - -# 2. 导入 tenant_id=1 的数据到ES -./scripts/ingest.sh 1 true - -# 3. 导入 tenant_id=2 的数据到ES -./scripts/ingest.sh 2 true -``` - ---- - -## 目录 - -1. [数据说明](#数据说明) -2. [构造Mock数据(tenant_id=1)](#构造mock数据tenant_id1) -3. [从CSV导入数据(tenant_id=2)](#从csv导入数据tenant_id2) -4. [从MySQL导入到Elasticsearch](#从mysql导入到elasticsearch) -5. [完整工作流程](#完整工作流程) -6. [常见问题](#常见问题) - ---- - -## 数据说明 - -系统支持两种测试数据源: - -1. **Tenant ID = 1**: 自动生成的Mock数据(使用 `generate_test_data.py` 生成) -2. **Tenant ID = 2**: 从CSV文件导入的真实数据(使用 `import_tenant2_csv.py` 导入) - -### 数据表结构 - -系统使用店匠标准表结构: - -- **SPU表**: `shoplazza_product_spu` - 商品SPU数据 -- **SKU表**: `shoplazza_product_sku` - 商品SKU数据 - -表结构详见 `INDEX_FIELDS_DOCUMENTATION.md`。 - ---- - -## 构造Mock数据(tenant_id=1) - -### 使用一键脚本(推荐) - -`mock_data.sh` 脚本会自动生成并导入 tenant_id=1 的Mock数据: - -```bash -cd /home/tw/SearchEngine -./scripts/mock_data.sh -``` - -脚本会自动: -- 生成 1000 个SPU的Mock数据 -- 导入数据到MySQL -- 自动计算起始ID,避免主键冲突 - -### 手动分步执行 - -如果需要自定义参数,可以分步执行: - -#### 步骤1: 生成Mock测试数据 - -```bash -python scripts/generate_test_data.py \ - --num-spus 1000 \ - --tenant-id "1" \ - --output test_data_tenant1.sql \ - --db-host 120.79.247.228 \ - --db-port 3316 \ - --db-database saas \ - --db-username saas \ - --db-password <密码> -``` - -参数说明: -- `--num-spus`: 生成的SPU数量(默认:1000) -- `--tenant-id`: 租户ID(默认:1) -- `--output`: 输出的SQL文件路径 -- `--db-host`, `--db-port`, `--db-database`, `--db-username`, `--db-password`: 数据库连接信息 - -#### 步骤2: 导入数据到MySQL - -```bash -python scripts/import_test_data.py \ - --db-host 120.79.247.228 \ - --db-port 3316 \ - --db-database saas \ - --db-username saas \ - --db-password <密码> \ - --sql-file test_data_tenant1.sql \ - --tenant-id "1" -``` - -参数说明: -- `--sql-file`: SQL文件路径 -- `--tenant-id`: 租户ID(用于清理旧数据) -- 其他参数:数据库连接信息 - -**注意**: 导入会先清理该 tenant_id 的旧数据,再导入新数据。 - ---- - -## 从CSV导入数据(tenant_id=2) - -### 使用一键脚本(推荐) - -`mock_data.sh` 脚本会自动从CSV文件导入 tenant_id=2 的数据: - -```bash -cd /home/tw/SearchEngine -./scripts/mock_data.sh -``` - -**前提条件**: 确保CSV文件存在于以下路径: -``` -data/customer1/goods_with_pic.5years_congku.csv.shuf.1w -``` - -如果CSV文件路径不同,需要修改 `scripts/mock_data.sh` 中的 `TENANT2_CSV_FILE` 变量。 - -### CSV文件格式要求 - -CSV文件需要包含以下列(列名不区分大小写): - -- `skuId` - SKU ID -- `name` - 商品名称 -- `name_pinyin` - 拼音(可选) -- `create_time` - 创建时间(格式:YYYY-MM-DD HH:MM:SS) -- `ruSkuName` - 俄文SKU名称(可选) -- `enSpuName` - 英文SPU名称(可选) -- `categoryName` - 类别名称 -- `supplierName` - 供应商名称 -- `brandName` - 品牌名称 -- `file_id` - 文件ID(可选) -- `days_since_last_update` - 更新天数(可选) -- `id` - 商品ID(可选) -- `imageUrl` - 图片URL(可选) - -### 手动分步执行 - -如果需要自定义参数,可以分步执行: - -#### 步骤1: 从CSV生成SQL文件 - -```bash -python scripts/import_tenant2_csv.py \ - --csv-file data/customer1/goods_with_pic.5years_congku.csv.shuf.1w \ - --tenant-id "2" \ - --output customer1_data.sql \ - --db-host 120.79.247.228 \ - --db-port 3316 \ - --db-database saas \ - --db-username saas \ - --db-password <密码> -``` - -参数说明: -- `--csv-file`: CSV文件路径 -- `--tenant-id`: 租户ID(默认:2) -- `--output`: 输出的SQL文件路径 -- 其他参数:数据库连接信息 - -#### 步骤2: 导入数据到MySQL - -```bash -python scripts/import_test_data.py \ - --db-host 120.79.247.228 \ - --db-port 3316 \ - --db-database saas \ - --db-username saas \ - --db-password <密码> \ - --sql-file customer1_data.sql \ - --tenant-id "2" -``` - -**注意**: -- CSV导入会先清理该 tenant_id 的旧数据,再导入新数据 -- 脚本会自动计算起始ID,避免主键冲突 - ---- - -## 从MySQL导入到Elasticsearch - -数据导入到MySQL后,需要使用 `ingest.sh` 脚本将数据从MySQL导入到Elasticsearch。 - -### 基本用法 - -```bash -./scripts/ingest.sh [recreate_index] -``` - -参数说明: -- `tenant_id`: **必需**,租户ID,用于筛选数据库中的数据 -- `recreate_index`: 可选,是否删除并重建索引(true/false,默认:false) - -### 使用示例 - -#### 重建索引并导入数据(推荐首次导入) - -```bash -# 导入tenant_id=1的数据并重建索引 -./scripts/ingest.sh 1 true - -# 导入tenant_id=2的数据并重建索引 -./scripts/ingest.sh 2 true -``` - -#### 增量导入(不重建索引) - -```bash -# 增量导入tenant_id=1的数据 -./scripts/ingest.sh 1 false - -# 增量导入tenant_id=2的数据 -./scripts/ingest.sh 2 false -``` - -### 手动执行 - -如果需要自定义参数,可以手动执行: - -```bash -python scripts/ingest_shoplazza.py \ - --db-host 120.79.247.228 \ - --db-port 3316 \ - --db-database saas \ - --db-username saas \ - --db-password <密码> \ - --tenant-id 1 \ - --es-host http://localhost:9200 \ - --recreate \ - --batch-size 500 -``` - -参数说明: -- `--db-host`, `--db-port`, `--db-database`, `--db-username`, `--db-password`: MySQL连接信息 -- `--tenant-id`: 租户ID(必需) -- `--es-host`: Elasticsearch地址 -- `--recreate`: 是否重建索引 -- `--batch-size`: 批量处理大小(默认:500) - -### 检查可用的 tenant_id - -如果导入时显示 "No documents to index",脚本会自动显示调试信息,包括: -- 该 tenant_id 的统计信息(总数、活跃数、已删除数) -- 数据库中存在的其他 tenant_id 列表 - -也可以直接查询数据库: - -```sql --- 查看有哪些 tenant_id -SELECT tenant_id, COUNT(*) as count, - SUM(CASE WHEN deleted = 0 THEN 1 ELSE 0 END) as active -FROM shoplazza_product_spu -GROUP BY tenant_id; - --- 检查特定 tenant_id 的数据 -SELECT COUNT(*) FROM shoplazza_product_spu -WHERE tenant_id = 2 AND deleted = 0; -``` - -**注意**: -- 只有 `deleted=0` 的记录会被导入 -- 首次运行会下载模型文件(BGE-M3和CN-CLIP),大约需要10-30分钟 -- 确保MySQL中存在对应 tenant_id 的数据 - ---- - -## 完整工作流程 - -### 完整示例:构造并导入所有测试数据 - -```bash -# 1. 构造并导入 tenant_id=1 的Mock数据到MySQL -./scripts/mock_data.sh - -# 脚本会自动完成: -# - 生成 tenant_id=1 的Mock数据(1000个SPU) -# - 从CSV导入 tenant_id=2 的数据 -# - 导入数据到MySQL - -# 2. 从MySQL导入 tenant_id=1 的数据到ES -./scripts/ingest.sh 1 true - -# 3. 从MySQL导入 tenant_id=2 的数据到ES -./scripts/ingest.sh 2 true - -# 4. 验证数据导入 -curl http://localhost:9200/search_products/_count -``` - -### 分步执行示例 - -如果需要更细粒度的控制,可以分步执行: - -```bash -# ===== Part 1: 构造 tenant_id=1 的Mock数据 ===== - -# 1.1 生成Mock数据 -python scripts/generate_test_data.py \ - --num-spus 1000 \ - --tenant-id "1" \ - --output test_data_tenant1.sql \ - --db-host 120.79.247.228 \ - --db-port 3316 \ - --db-database saas \ - --db-username saas \ - --db-password <密码> - -# 1.2 导入到MySQL -python scripts/import_test_data.py \ - --db-host 120.79.247.228 \ - --db-port 3316 \ - --db-database saas \ - --db-username saas \ - --db-password <密码> \ - --sql-file test_data_tenant1.sql \ - --tenant-id "1" - -# ===== Part 2: 从CSV导入 tenant_id=2 的数据 ===== - -# 2.1 从CSV生成SQL -python scripts/import_tenant2_csv.py \ - --csv-file data/customer1/goods_with_pic.5years_congku.csv.shuf.1w \ - --tenant-id "2" \ - --output customer1_data.sql \ - --db-host 120.79.247.228 \ - --db-port 3316 \ - --db-database saas \ - --db-username saas \ - --db-password <密码> - -# 2.2 导入到MySQL -python scripts/import_test_data.py \ - --db-host 120.79.247.228 \ - --db-port 3316 \ - --db-database saas \ - --db-username saas \ - --db-password <密码> \ - --sql-file customer1_data.sql \ - --tenant-id "2" - -# ===== Part 3: 从MySQL导入到ES ===== - -# 3.1 导入 tenant_id=1 的数据到ES -./scripts/ingest.sh 1 true - -# 3.2 导入 tenant_id=2 的数据到ES -./scripts/ingest.sh 2 true - -# ===== Part 4: 验证 ===== - -# 4.1 检查ES中的数据量 -curl http://localhost:9200/search_products/_count - -# 4.2 测试搜索 -curl -X POST http://localhost:6002/search/ \ - -H "Content-Type: application/json" \ - -H "X-Tenant-ID: 1" \ - -d '{"query": "玩具", "size": 10}' -``` - ---- - -## 常见问题 - -### Q1: 数据导入失败 - -**症状**: `Error during data ingestion` - -**解决方案**: -```bash -# 检查MySQL数据是否存在 -mysql -h 120.79.247.228 -P 3316 -u saas -p saas -e \ - "SELECT COUNT(*) FROM shoplazza_product_spu WHERE tenant_id=1" - -# 检查ES索引是否存在 -curl http://localhost:9200/search_products - -# 查看详细错误日志 -python scripts/ingest_shoplazza.py --tenant-id 1 --recreate -``` - -### Q2: CSV文件找不到 - -**症状**: `ERROR: CSV file not found` - -**解决方案**: -```bash -# 检查CSV文件是否存在 -ls -lh data/customer1/goods_with_pic.5years_congku.csv.shuf.1w - -# 如果路径不同,修改 scripts/mock_data.sh 中的 TENANT2_CSV_FILE 变量 -``` - -### Q3: 导入时没有数据 - -**症状**: `WARNING: No documents to index` 或 `Transformed 0 SPU documents` - -**可能原因**: -1. 数据库中不存在该 tenant_id 的数据 -2. 数据都被标记为 `deleted=1` -3. tenant_id 类型不匹配 - -**解决步骤**: - -1. **查看调试信息**: 脚本会自动显示调试信息,包括: - ``` - DEBUG: tenant_id=1000: total=0, active=0, deleted=0 - DEBUG: Available tenant_ids in shoplazza_product_spu: - tenant_id=1: total=100, active=100 - tenant_id=2: total=50, active=50 - ``` - -2. **检查数据库**: 直接查询MySQL确认数据 - ```sql - -- 查看有哪些 tenant_id - SELECT tenant_id, COUNT(*) as count, - SUM(CASE WHEN deleted = 0 THEN 1 ELSE 0 END) as active - FROM shoplazza_product_spu - GROUP BY tenant_id; - - -- 检查特定 tenant_id 的数据 - SELECT COUNT(*) FROM shoplazza_product_spu - WHERE tenant_id = 2 AND deleted = 0; - ``` - -3. **如果数据库中没有数据,需要先导入数据**: - - 如果有CSV文件,使用CSV导入脚本 - - 如果没有CSV文件,可以使用mock数据生成脚本 - -4. **使用正确的 tenant_id**: 根据调试信息显示的可用 tenant_id,使用正确的值重新导入 - ```bash - ./scripts/ingest.sh 2 true # 使用调试信息中显示的 tenant_id - ``` - -### Q4: 模型下载慢或失败 - -**症状**: 首次运行时模型下载很慢或超时 - -**解决方案**: -```bash -# 跳过embedding快速测试(不推荐,但可以快速验证流程) -# 注意:这会导致搜索功能不完整 - -# 或手动下载模型到指定目录 -# TEXT_MODEL_DIR=/data/tw/models/bge-m3 -# IMAGE_MODEL_DIR=/data/tw/models/cn-clip -``` - -### Q5: 内存不足 - -**症状**: `Out of memory` - -**解决方案**: -```bash -# 减少批量大小 -python scripts/ingest_shoplazza.py \ - --tenant-id 1 \ - --batch-size 200 # 默认500,可以减少到100-200 -``` - -### Q6: 主键冲突 - -**症状**: `Duplicate entry` 错误 - -**解决方案**: -- Mock数据脚本会自动计算起始ID,避免冲突 -- 如果仍有冲突,可以手动清理旧数据: - ```sql - DELETE FROM shoplazza_product_spu WHERE tenant_id = 1; - DELETE FROM shoplazza_product_sku WHERE tenant_id = 1; - ``` - ---- -- libgit2 0.21.2