Commit 697047e45cd594b36eb1b0befa244bc345dbbd77

Authored by tangwang
1 parent 33839b37

rm useless doc

Showing 1 changed file with 0 additions and 514 deletions   Show diff stats
docs/测试数据指南.md deleted
@@ -1,514 +0,0 @@ @@ -1,514 +0,0 @@
1 -# 测试数据构造指南 - SearchEngine  
2 -  
3 -本文档说明如何构造测试数据,包括两种数据源的准备和导入流程。  
4 -  
5 ----  
6 -  
7 -## 快速开始  
8 -  
9 -### 1. 构造 Mock 数据(tenant_id=1 和 tenant_id=2)  
10 -  
11 -```bash  
12 -./scripts/mock_data.sh  
13 -```  
14 -  
15 -功能:自动生成 tenant_id=1 的Mock数据,并从CSV导入 tenant_id=2 的数据到MySQL  
16 -  
17 ----  
18 -  
19 -### 2. 从 MySQL → Elasticsearch  
20 -  
21 -```bash  
22 -# 导入 tenant_id=1 的数据(重建索引)  
23 -./scripts/ingest.sh 1 true  
24 -  
25 -# 导入 tenant_id=2 的数据(重建索引)  
26 -./scripts/ingest.sh 2 true  
27 -```  
28 -  
29 -  
30 -**用法**:`./scripts/ingest.sh <tenant_id> [recreate_index]`  
31 -- `tenant_id`: 租户ID(1 或 2)  
32 -- `recreate_index`: 是否重建索引(`true`/`false`,默认:`false`)  
33 -  
34 ----  
35 -  
36 -## 完整工作流程  
37 -  
38 -```bash  
39 -# 1. 构造并导入测试数据到MySQL  
40 -./scripts/mock_data.sh  
41 -  
42 -# 2. 导入 tenant_id=1 的数据到ES  
43 -./scripts/ingest.sh 1 true  
44 -  
45 -# 3. 导入 tenant_id=2 的数据到ES  
46 -./scripts/ingest.sh 2 true  
47 -```  
48 -  
49 ----  
50 -  
51 -## 目录  
52 -  
53 -1. [数据说明](#数据说明)  
54 -2. [构造Mock数据(tenant_id=1)](#构造mock数据tenant_id1)  
55 -3. [从CSV导入数据(tenant_id=2)](#从csv导入数据tenant_id2)  
56 -4. [从MySQL导入到Elasticsearch](#从mysql导入到elasticsearch)  
57 -5. [完整工作流程](#完整工作流程)  
58 -6. [常见问题](#常见问题)  
59 -  
60 ----  
61 -  
62 -## 数据说明  
63 -  
64 -系统支持两种测试数据源:  
65 -  
66 -1. **Tenant ID = 1**: 自动生成的Mock数据(使用 `generate_test_data.py` 生成)  
67 -2. **Tenant ID = 2**: 从CSV文件导入的真实数据(使用 `import_tenant2_csv.py` 导入)  
68 -  
69 -### 数据表结构  
70 -  
71 -系统使用店匠标准表结构:  
72 -  
73 -- **SPU表**: `shoplazza_product_spu` - 商品SPU数据  
74 -- **SKU表**: `shoplazza_product_sku` - 商品SKU数据  
75 -  
76 -表结构详见 `INDEX_FIELDS_DOCUMENTATION.md`。  
77 -  
78 ----  
79 -  
80 -## 构造Mock数据(tenant_id=1)  
81 -  
82 -### 使用一键脚本(推荐)  
83 -  
84 -`mock_data.sh` 脚本会自动生成并导入 tenant_id=1 的Mock数据:  
85 -  
86 -```bash  
87 -cd /home/tw/SearchEngine  
88 -./scripts/mock_data.sh  
89 -```  
90 -  
91 -脚本会自动:  
92 -- 生成 1000 个SPU的Mock数据  
93 -- 导入数据到MySQL  
94 -- 自动计算起始ID,避免主键冲突  
95 -  
96 -### 手动分步执行  
97 -  
98 -如果需要自定义参数,可以分步执行:  
99 -  
100 -#### 步骤1: 生成Mock测试数据  
101 -  
102 -```bash  
103 -python scripts/generate_test_data.py \  
104 - --num-spus 1000 \  
105 - --tenant-id "1" \  
106 - --output test_data_tenant1.sql \  
107 - --db-host 120.79.247.228 \  
108 - --db-port 3316 \  
109 - --db-database saas \  
110 - --db-username saas \  
111 - --db-password <密码>  
112 -```  
113 -  
114 -参数说明:  
115 -- `--num-spus`: 生成的SPU数量(默认:1000)  
116 -- `--tenant-id`: 租户ID(默认:1)  
117 -- `--output`: 输出的SQL文件路径  
118 -- `--db-host`, `--db-port`, `--db-database`, `--db-username`, `--db-password`: 数据库连接信息  
119 -  
120 -#### 步骤2: 导入数据到MySQL  
121 -  
122 -```bash  
123 -python scripts/import_test_data.py \  
124 - --db-host 120.79.247.228 \  
125 - --db-port 3316 \  
126 - --db-database saas \  
127 - --db-username saas \  
128 - --db-password <密码> \  
129 - --sql-file test_data_tenant1.sql \  
130 - --tenant-id "1"  
131 -```  
132 -  
133 -参数说明:  
134 -- `--sql-file`: SQL文件路径  
135 -- `--tenant-id`: 租户ID(用于清理旧数据)  
136 -- 其他参数:数据库连接信息  
137 -  
138 -**注意**: 导入会先清理该 tenant_id 的旧数据,再导入新数据。  
139 -  
140 ----  
141 -  
142 -## 从CSV导入数据(tenant_id=2)  
143 -  
144 -### 使用一键脚本(推荐)  
145 -  
146 -`mock_data.sh` 脚本会自动从CSV文件导入 tenant_id=2 的数据:  
147 -  
148 -```bash  
149 -cd /home/tw/SearchEngine  
150 -./scripts/mock_data.sh  
151 -```  
152 -  
153 -**前提条件**: 确保CSV文件存在于以下路径:  
154 -```  
155 -data/customer1/goods_with_pic.5years_congku.csv.shuf.1w  
156 -```  
157 -  
158 -如果CSV文件路径不同,需要修改 `scripts/mock_data.sh` 中的 `TENANT2_CSV_FILE` 变量。  
159 -  
160 -### CSV文件格式要求  
161 -  
162 -CSV文件需要包含以下列(列名不区分大小写):  
163 -  
164 -- `skuId` - SKU ID  
165 -- `name` - 商品名称  
166 -- `name_pinyin` - 拼音(可选)  
167 -- `create_time` - 创建时间(格式:YYYY-MM-DD HH:MM:SS)  
168 -- `ruSkuName` - 俄文SKU名称(可选)  
169 -- `enSpuName` - 英文SPU名称(可选)  
170 -- `categoryName` - 类别名称  
171 -- `supplierName` - 供应商名称  
172 -- `brandName` - 品牌名称  
173 -- `file_id` - 文件ID(可选)  
174 -- `days_since_last_update` - 更新天数(可选)  
175 -- `id` - 商品ID(可选)  
176 -- `imageUrl` - 图片URL(可选)  
177 -  
178 -### 手动分步执行  
179 -  
180 -如果需要自定义参数,可以分步执行:  
181 -  
182 -#### 步骤1: 从CSV生成SQL文件  
183 -  
184 -```bash  
185 -python scripts/import_tenant2_csv.py \  
186 - --csv-file data/customer1/goods_with_pic.5years_congku.csv.shuf.1w \  
187 - --tenant-id "2" \  
188 - --output customer1_data.sql \  
189 - --db-host 120.79.247.228 \  
190 - --db-port 3316 \  
191 - --db-database saas \  
192 - --db-username saas \  
193 - --db-password <密码>  
194 -```  
195 -  
196 -参数说明:  
197 -- `--csv-file`: CSV文件路径  
198 -- `--tenant-id`: 租户ID(默认:2)  
199 -- `--output`: 输出的SQL文件路径  
200 -- 其他参数:数据库连接信息  
201 -  
202 -#### 步骤2: 导入数据到MySQL  
203 -  
204 -```bash  
205 -python scripts/import_test_data.py \  
206 - --db-host 120.79.247.228 \  
207 - --db-port 3316 \  
208 - --db-database saas \  
209 - --db-username saas \  
210 - --db-password <密码> \  
211 - --sql-file customer1_data.sql \  
212 - --tenant-id "2"  
213 -```  
214 -  
215 -**注意**:  
216 -- CSV导入会先清理该 tenant_id 的旧数据,再导入新数据  
217 -- 脚本会自动计算起始ID,避免主键冲突  
218 -  
219 ----  
220 -  
221 -## 从MySQL导入到Elasticsearch  
222 -  
223 -数据导入到MySQL后,需要使用 `ingest.sh` 脚本将数据从MySQL导入到Elasticsearch。  
224 -  
225 -### 基本用法  
226 -  
227 -```bash  
228 -./scripts/ingest.sh <tenant_id> [recreate_index]  
229 -```  
230 -  
231 -参数说明:  
232 -- `tenant_id`: **必需**,租户ID,用于筛选数据库中的数据  
233 -- `recreate_index`: 可选,是否删除并重建索引(true/false,默认:false)  
234 -  
235 -### 使用示例  
236 -  
237 -#### 重建索引并导入数据(推荐首次导入)  
238 -  
239 -```bash  
240 -# 导入tenant_id=1的数据并重建索引  
241 -./scripts/ingest.sh 1 true  
242 -  
243 -# 导入tenant_id=2的数据并重建索引  
244 -./scripts/ingest.sh 2 true  
245 -```  
246 -  
247 -#### 增量导入(不重建索引)  
248 -  
249 -```bash  
250 -# 增量导入tenant_id=1的数据  
251 -./scripts/ingest.sh 1 false  
252 -  
253 -# 增量导入tenant_id=2的数据  
254 -./scripts/ingest.sh 2 false  
255 -```  
256 -  
257 -### 手动执行  
258 -  
259 -如果需要自定义参数,可以手动执行:  
260 -  
261 -```bash  
262 -python scripts/ingest_shoplazza.py \  
263 - --db-host 120.79.247.228 \  
264 - --db-port 3316 \  
265 - --db-database saas \  
266 - --db-username saas \  
267 - --db-password <密码> \  
268 - --tenant-id 1 \  
269 - --es-host http://localhost:9200 \  
270 - --recreate \  
271 - --batch-size 500  
272 -```  
273 -  
274 -参数说明:  
275 -- `--db-host`, `--db-port`, `--db-database`, `--db-username`, `--db-password`: MySQL连接信息  
276 -- `--tenant-id`: 租户ID(必需)  
277 -- `--es-host`: Elasticsearch地址  
278 -- `--recreate`: 是否重建索引  
279 -- `--batch-size`: 批量处理大小(默认:500)  
280 -  
281 -### 检查可用的 tenant_id  
282 -  
283 -如果导入时显示 "No documents to index",脚本会自动显示调试信息,包括:  
284 -- 该 tenant_id 的统计信息(总数、活跃数、已删除数)  
285 -- 数据库中存在的其他 tenant_id 列表  
286 -  
287 -也可以直接查询数据库:  
288 -  
289 -```sql  
290 --- 查看有哪些 tenant_id  
291 -SELECT tenant_id, COUNT(*) as count,  
292 - SUM(CASE WHEN deleted = 0 THEN 1 ELSE 0 END) as active  
293 -FROM shoplazza_product_spu  
294 -GROUP BY tenant_id;  
295 -  
296 --- 检查特定 tenant_id 的数据  
297 -SELECT COUNT(*) FROM shoplazza_product_spu  
298 -WHERE tenant_id = 2 AND deleted = 0;  
299 -```  
300 -  
301 -**注意**:  
302 -- 只有 `deleted=0` 的记录会被导入  
303 -- 首次运行会下载模型文件(BGE-M3和CN-CLIP),大约需要10-30分钟  
304 -- 确保MySQL中存在对应 tenant_id 的数据  
305 -  
306 ----  
307 -  
308 -## 完整工作流程  
309 -  
310 -### 完整示例:构造并导入所有测试数据  
311 -  
312 -```bash  
313 -# 1. 构造并导入 tenant_id=1 的Mock数据到MySQL  
314 -./scripts/mock_data.sh  
315 -  
316 -# 脚本会自动完成:  
317 -# - 生成 tenant_id=1 的Mock数据(1000个SPU)  
318 -# - 从CSV导入 tenant_id=2 的数据  
319 -# - 导入数据到MySQL  
320 -  
321 -# 2. 从MySQL导入 tenant_id=1 的数据到ES  
322 -./scripts/ingest.sh 1 true  
323 -  
324 -# 3. 从MySQL导入 tenant_id=2 的数据到ES  
325 -./scripts/ingest.sh 2 true  
326 -  
327 -# 4. 验证数据导入  
328 -curl http://localhost:9200/search_products/_count  
329 -```  
330 -  
331 -### 分步执行示例  
332 -  
333 -如果需要更细粒度的控制,可以分步执行:  
334 -  
335 -```bash  
336 -# ===== Part 1: 构造 tenant_id=1 的Mock数据 =====  
337 -  
338 -# 1.1 生成Mock数据  
339 -python scripts/generate_test_data.py \  
340 - --num-spus 1000 \  
341 - --tenant-id "1" \  
342 - --output test_data_tenant1.sql \  
343 - --db-host 120.79.247.228 \  
344 - --db-port 3316 \  
345 - --db-database saas \  
346 - --db-username saas \  
347 - --db-password <密码>  
348 -  
349 -# 1.2 导入到MySQL  
350 -python scripts/import_test_data.py \  
351 - --db-host 120.79.247.228 \  
352 - --db-port 3316 \  
353 - --db-database saas \  
354 - --db-username saas \  
355 - --db-password <密码> \  
356 - --sql-file test_data_tenant1.sql \  
357 - --tenant-id "1"  
358 -  
359 -# ===== Part 2: 从CSV导入 tenant_id=2 的数据 =====  
360 -  
361 -# 2.1 从CSV生成SQL  
362 -python scripts/import_tenant2_csv.py \  
363 - --csv-file data/customer1/goods_with_pic.5years_congku.csv.shuf.1w \  
364 - --tenant-id "2" \  
365 - --output customer1_data.sql \  
366 - --db-host 120.79.247.228 \  
367 - --db-port 3316 \  
368 - --db-database saas \  
369 - --db-username saas \  
370 - --db-password <密码>  
371 -  
372 -# 2.2 导入到MySQL  
373 -python scripts/import_test_data.py \  
374 - --db-host 120.79.247.228 \  
375 - --db-port 3316 \  
376 - --db-database saas \  
377 - --db-username saas \  
378 - --db-password <密码> \  
379 - --sql-file customer1_data.sql \  
380 - --tenant-id "2"  
381 -  
382 -# ===== Part 3: 从MySQL导入到ES =====  
383 -  
384 -# 3.1 导入 tenant_id=1 的数据到ES  
385 -./scripts/ingest.sh 1 true  
386 -  
387 -# 3.2 导入 tenant_id=2 的数据到ES  
388 -./scripts/ingest.sh 2 true  
389 -  
390 -# ===== Part 4: 验证 =====  
391 -  
392 -# 4.1 检查ES中的数据量  
393 -curl http://localhost:9200/search_products/_count  
394 -  
395 -# 4.2 测试搜索  
396 -curl -X POST http://localhost:6002/search/ \  
397 - -H "Content-Type: application/json" \  
398 - -H "X-Tenant-ID: 1" \  
399 - -d '{"query": "玩具", "size": 10}'  
400 -```  
401 -  
402 ----  
403 -  
404 -## 常见问题  
405 -  
406 -### Q1: 数据导入失败  
407 -  
408 -**症状**: `Error during data ingestion`  
409 -  
410 -**解决方案**:  
411 -```bash  
412 -# 检查MySQL数据是否存在  
413 -mysql -h 120.79.247.228 -P 3316 -u saas -p saas -e \  
414 - "SELECT COUNT(*) FROM shoplazza_product_spu WHERE tenant_id=1"  
415 -  
416 -# 检查ES索引是否存在  
417 -curl http://localhost:9200/search_products  
418 -  
419 -# 查看详细错误日志  
420 -python scripts/ingest_shoplazza.py --tenant-id 1 --recreate  
421 -```  
422 -  
423 -### Q2: CSV文件找不到  
424 -  
425 -**症状**: `ERROR: CSV file not found`  
426 -  
427 -**解决方案**:  
428 -```bash  
429 -# 检查CSV文件是否存在  
430 -ls -lh data/customer1/goods_with_pic.5years_congku.csv.shuf.1w  
431 -  
432 -# 如果路径不同,修改 scripts/mock_data.sh 中的 TENANT2_CSV_FILE 变量  
433 -```  
434 -  
435 -### Q3: 导入时没有数据  
436 -  
437 -**症状**: `WARNING: No documents to index` 或 `Transformed 0 SPU documents`  
438 -  
439 -**可能原因**:  
440 -1. 数据库中不存在该 tenant_id 的数据  
441 -2. 数据都被标记为 `deleted=1`  
442 -3. tenant_id 类型不匹配  
443 -  
444 -**解决步骤**:  
445 -  
446 -1. **查看调试信息**: 脚本会自动显示调试信息,包括:  
447 - ```  
448 - DEBUG: tenant_id=1000: total=0, active=0, deleted=0  
449 - DEBUG: Available tenant_ids in shoplazza_product_spu:  
450 - tenant_id=1: total=100, active=100  
451 - tenant_id=2: total=50, active=50  
452 - ```  
453 -  
454 -2. **检查数据库**: 直接查询MySQL确认数据  
455 - ```sql  
456 - -- 查看有哪些 tenant_id  
457 - SELECT tenant_id, COUNT(*) as count,  
458 - SUM(CASE WHEN deleted = 0 THEN 1 ELSE 0 END) as active  
459 - FROM shoplazza_product_spu  
460 - GROUP BY tenant_id;  
461 -  
462 - -- 检查特定 tenant_id 的数据  
463 - SELECT COUNT(*) FROM shoplazza_product_spu  
464 - WHERE tenant_id = 2 AND deleted = 0;  
465 - ```  
466 -  
467 -3. **如果数据库中没有数据,需要先导入数据**:  
468 - - 如果有CSV文件,使用CSV导入脚本  
469 - - 如果没有CSV文件,可以使用mock数据生成脚本  
470 -  
471 -4. **使用正确的 tenant_id**: 根据调试信息显示的可用 tenant_id,使用正确的值重新导入  
472 - ```bash  
473 - ./scripts/ingest.sh 2 true # 使用调试信息中显示的 tenant_id  
474 - ```  
475 -  
476 -### Q4: 模型下载慢或失败  
477 -  
478 -**症状**: 首次运行时模型下载很慢或超时  
479 -  
480 -**解决方案**:  
481 -```bash  
482 -# 跳过embedding快速测试(不推荐,但可以快速验证流程)  
483 -# 注意:这会导致搜索功能不完整  
484 -  
485 -# 或手动下载模型到指定目录  
486 -# TEXT_MODEL_DIR=/data/tw/models/bge-m3  
487 -# IMAGE_MODEL_DIR=/data/tw/models/cn-clip  
488 -```  
489 -  
490 -### Q5: 内存不足  
491 -  
492 -**症状**: `Out of memory`  
493 -  
494 -**解决方案**:  
495 -```bash  
496 -# 减少批量大小  
497 -python scripts/ingest_shoplazza.py \  
498 - --tenant-id 1 \  
499 - --batch-size 200 # 默认500,可以减少到100-200  
500 -```  
501 -  
502 -### Q6: 主键冲突  
503 -  
504 -**症状**: `Duplicate entry` 错误  
505 -  
506 -**解决方案**:  
507 -- Mock数据脚本会自动计算起始ID,避免冲突  
508 -- 如果仍有冲突,可以手动清理旧数据:  
509 - ```sql  
510 - DELETE FROM shoplazza_product_spu WHERE tenant_id = 1;  
511 - DELETE FROM shoplazza_product_sku WHERE tenant_id = 1;  
512 - ```  
513 -  
514 ----