索引字段说明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_pricemax_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 的字段定义
  • 可能需要添加新字段的配置定义,或者直接在代码中生成映射(如果配置系统不支持这些复杂字段)