索引字段说明v2-plan.md
5.53 KB
索引重构v2方案
概述
根据 索引字段说明v2.md 的要求重构Elasticsearch索引映射结构和MySQL到ES的数据导入脚本。
主要变更点
1. 索引映射结构重构
1.1 多语言文本字段
- 为文本字段添加中英文双字段支持(title_zh/title_en, brief_zh/brief_en, description_zh/description_en, vendor_zh/vendor_en)
- 中文字段使用
index_ansj/query_ansj分析器(对应文档中的hanlp_index/hanlp_standard) - 英文字段使用
english分析器 - 暂时只填充中文字段,英文字段设为空(不需要语言检测,每个tenant的语言预先知道)
1.2 分类字段多层级支持
类别数据源: 在spu表中: Field Type category varchar(255) category_id bigint(20) category_google_id bigint(20) category_level int(11) category_path varchar(500)
mapping:
"category_path_zh": { // 提供模糊查询功能,辅助相关性计算
"type": "text",
"analyzer": "hanlp_index",
"search_analyzer": "hanlp_standard"
},
"category_path_en": { // 提供模糊查询功能,辅助相关性计算
"type": "text",
"analyzer": "english",
"search_analyzer": "english"
},
"category_name_zh": { // 提供模糊查询功能,辅助相关性计算
"type": "text",
"analyzer": "hanlp_index",
"search_analyzer": "hanlp_standard"
},
"category_name_en": { // 提供模糊查询功能,辅助相关性计算
"type": "text",
"analyzer": "english",
"search_analyzer": "english"
},
"category_id": {
"type": "keyword"
},
"category_name": {
"type": "keyword"
},
"category_level": {
"type": "integer"
},
"category1_name": { // 不同层级下 可能有同名的情况,因此提供一二三级分开的查询方式
"type": "keyword"
},
"category2_name": {
"type": "keyword"
},
"category3_name": {
"type": "keyword"
},
1.3 SKU字段展开
- 添加
sku_prices(float数组) - 所有SKU价格列表 - 添加
sku_weights(long数组) - 重量数值列表(转换为整数克) - 添加
sku_weight_units(keyword数组) - 重量+单位字符串列表 - 添加
total_inventory(long) - SKU库存总和 - 保留
min_price,max_price(float)
1.4 选项字段处理
- 添加
option1_name,option2_name,option3_name(keyword) - SPU级别的选项名称定义 - 修改SKU嵌套结构:将
options对象改为option1_value,option2_value,option3_value(keyword) - 添加
specifications(nested, index=false) - 动态属性,仅用于返回
1.5 标签字段
tags改为 keyword 数组类型(分割逗号分隔的字符串)
1.6 SKU嵌套结构更新
- 添加
sku_code(keyword) 字段 - 添加
weight(float),weight_unit(keyword) - 将
options对象改为option1_value,option2_value,option3_value - 添加
image_src(keyword, index=false)
1.7 删除SEO字段
- 完全删除
seo_title,seo_description,seo_keywords字段 - 从索引映射中移除
- 从数据转换脚本中移除相关处理
2. 数据转换脚本重构
2.1 多语言文本处理
- 简化处理:暂时只填充中文字段(title_zh, brief_zh, description_zh, vendor_zh)
- 英文字段(title_en, brief_en, description_en, vendor_en)设为空或None
- 不需要语言检测逻辑
2.2 分类路径解析
- 从
category_path字段按 "/" 分割提取分类层级 - 分割结果赋值给
category1_name,category2_name,category3_name - 生成
category_path_zh(暂时填充,category_path_en设为空)
2.3 SKU字段展开计算
- 提取所有SKU的价格,生成
sku_prices数组 - 提取所有SKU的重量,转换为克(乘以1000),生成
sku_weights数组 - 生成
sku_weight_units数组(格式:"重量值单位") - 计算所有SKU库存总和,赋值给
total_inventory - 计算
min_price和max_price
2.4 选项字段处理
- SPU级别的选项名称:需要从SPU数据或SKU数据推断(如果SPU表中没有,需要查看是否有选项表)
- SKU级别的选项值:从SKU的
option1,option2,option3字段提取 - 生成
specifications嵌套数组(从选项名称和值对生成)
2.5 标签处理
tags字段按逗号分割转换为数组
2.6 删除SEO字段处理
- 完全移除 seo_title, seo_description, seo_keywords 相关代码
实施步骤
步骤1:修改索引映射生成器
文件: indexer/mapping_generator.py 和相关字段配置
- 更新
get_es_mapping_for_field函数以支持多语言字段 - 添加分类字段的完整映射生成逻辑
- 添加SKU展开字段的映射
- 添加选项字段的映射
- 删除SEO字段的映射生成
步骤2:重构数据转换脚本
文件: indexer/spu_transformer.py
- 简化多语言处理:只填充中文字段(title_zh, brief_zh等),英文字段设为空或None
- 实现分类路径的解析和展开
- 实现SKU字段的展开计算(价格、重量、库存)
- 实现选项字段的处理
- 更新SKU嵌套结构的生成
- 处理标签的分割
- 删除所有SEO字段相关代码
步骤3:更新配置文件
文件: config/config.yaml
- 删除SEO字段配置:移除 seo_title, seo_description, seo_keywords 的字段定义
- 可能需要添加新字段的配置定义,或者直接在代码中生成映射(如果配置系统不支持这些复杂字段)