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   -# 测试数据构造指南 - 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   ----