Commit ec44ff39b8c624753afed9abfb56ee82c7134c22

Authored by tangwang
1 parent bf4968cf

文档完善

docs/INDEX_FIELDS_DOCUMENTATION.md 0 → 100644
... ... @@ -0,0 +1,223 @@
  1 +# 索引字段说明文档
  2 +
  3 +本文档详细说明了 Elasticsearch 索引中所有字段的类型、索引方式、数据来源等信息。
  4 +
  5 +## 索引基本信息
  6 +
  7 +- **索引名称**: `search_products`
  8 +- **索引级别**: SPU级别(商品级别)
  9 +- **数据结构**: SPU文档包含嵌套的variants(SKU)数组
  10 +
  11 +## 字段说明表
  12 +
  13 +### 基础字段
  14 +
  15 +| 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | 说明 |
  16 +|-----------|-----------|---------|---------|-----------|-----------|-------------|------|
  17 +| tenant_id | keyword | 是 | 精确匹配 | SPU表 | tenant_id | BIGINT | 租户ID,用于多租户隔离 |
  18 +| product_id | keyword | 是 | 精确匹配 | SPU表 | id | BIGINT | 商品ID(SPU ID) |
  19 +| handle | keyword | 是 | 精确匹配 | SPU表 | handle | VARCHAR(255) | 商品URL handle |
  20 +
  21 +### 文本搜索字段
  22 +
  23 +| 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | Boost权重 | 说明 |
  24 +|-----------|-----------|---------|---------|-----------|-----------|-------------|-----------|------|
  25 +| title | TEXT | 是 | english | SPU表 | title | VARCHAR(512) | 3.0 | 商品标题,权重最高 |
  26 +| brief | TEXT | 是 | english | SPU表 | brief | VARCHAR(512) | 1.5 | 商品简介 |
  27 +| description | TEXT | 是 | english | SPU表 | description | TEXT | 1.0 | 商品详细描述 |
  28 +
  29 +### SEO字段
  30 +
  31 +| 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | Boost权重 | 是否返回 | 说明 |
  32 +|-----------|-----------|---------|---------|-----------|-----------|-------------|-----------|---------|------|
  33 +| seo_title | TEXT | 是 | english | SPU表 | seo_title | VARCHAR(512) | 2.0 | 否 | SEO标题,用于提升相关性 |
  34 +| seo_description | TEXT | 是 | english | SPU表 | seo_description | TEXT | 1.5 | 否 | SEO描述 |
  35 +| seo_keywords | TEXT | 是 | english | SPU表 | seo_keywords | VARCHAR(1024) | 2.0 | 否 | SEO关键词 |
  36 +
  37 +### 分类和标签字段
  38 +
  39 +| 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | Boost权重 | 是否返回 | 说明 |
  40 +|-----------|-----------|---------|---------|-----------|-----------|-------------|-----------|---------|------|
  41 +| vendor | TEXT | 是 | english | SPU表 | vendor | VARCHAR(255) | 1.5 | 是 | 供应商/品牌(文本搜索) |
  42 +| vendor_keyword | keyword | 是 | 精确匹配 | SPU表 | vendor | VARCHAR(255) | - | 否 | 供应商/品牌(精确匹配,用于过滤) |
  43 +| product_type | TEXT | 是 | english | SPU表 | category | VARCHAR(255) | 1.5 | 是 | 商品类型(文本搜索) |
  44 +| product_type_keyword | keyword | 是 | 精确匹配 | SPU表 | category | VARCHAR(255) | - | 否 | 商品类型(精确匹配,用于过滤) |
  45 +| tags | TEXT | 是 | english | SPU表 | tags | VARCHAR(1024) | 1.0 | 是 | 标签(文本搜索) |
  46 +| tags_keyword | keyword | 是 | 精确匹配 | SPU表 | tags | VARCHAR(1024) | - | 否 | 标签(精确匹配,用于过滤) |
  47 +| category | TEXT | 是 | english | SPU表 | category | VARCHAR(255) | 1.5 | 是 | 类目(文本搜索) |
  48 +| category_keyword | keyword | 是 | 精确匹配 | SPU表 | category | VARCHAR(255) | - | 否 | 类目(精确匹配,用于过滤) |
  49 +
  50 +### 价格字段
  51 +
  52 +| 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | 说明 |
  53 +|-----------|-----------|---------|---------|-----------|-----------|-------------|------|
  54 +| min_price | FLOAT | 是 | float | SKU表(聚合计算) | price | DECIMAL(10,2) | 最低价格(从所有SKU中取最小值) |
  55 +| max_price | FLOAT | 是 | float | SKU表(聚合计算) | price | DECIMAL(10,2) | 最高价格(从所有SKU中取最大值) |
  56 +| compare_at_price | FLOAT | 是 | float | SKU表(聚合计算) | compare_at_price | DECIMAL(10,2) | 原价(从所有SKU中取最大值) |
  57 +
  58 +**价格计算逻辑**:
  59 +- `min_price`: 取该SPU下所有SKU的price字段的最小值
  60 +- `max_price`: 取该SPU下所有SKU的price字段的最大值
  61 +- `compare_at_price`: 取该SPU下所有SKU的compare_at_price字段的最大值(如果存在)
  62 +
  63 +### 图片字段
  64 +
  65 +| 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | 说明 |
  66 +|-----------|-----------|---------|---------|-----------|-----------|-------------|------|
  67 +| image_url | keyword | 否 | 不索引 | SPU表 | image_src | VARCHAR(500) | 商品主图URL,仅用于展示 |
  68 +
  69 +### 文本嵌入字段
  70 +
  71 +| 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | 说明 |
  72 +|-----------|-----------|---------|---------|-----------|-----------|-------------|------|
  73 +| title_embedding | TEXT_EMBEDDING | 是 | 向量相似度(dot_product) | 计算生成 | title | VARCHAR(512) | 标题的文本向量(1024维),用于语义搜索 |
  74 +
  75 +**说明**:
  76 +- 向量维度:1024
  77 +- 相似度算法:dot_product(点积)
  78 +- 数据来源:基于title字段通过BGE-M3模型生成
  79 +
  80 +### 时间字段
  81 +
  82 +| 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | 是否返回 | 说明 |
  83 +|-----------|-----------|---------|---------|-----------|-----------|-------------|---------|------|
  84 +| create_time | DATE | 是 | 日期范围 | SPU表 | create_time | DATETIME | 是 | 创建时间 |
  85 +| update_time | DATE | 是 | 日期范围 | SPU表 | update_time | DATETIME | 是 | 更新时间 |
  86 +| shoplazza_created_at | DATE | 是 | 日期范围 | SPU表 | shoplazza_created_at | DATETIME | 否 | 店匠系统创建时间 |
  87 +| shoplazza_updated_at | DATE | 是 | 日期范围 | SPU表 | shoplazza_updated_at | DATETIME | 否 | 店匠系统更新时间 |
  88 +
  89 +### 嵌套Variants字段(SKU级别)
  90 +
  91 +| 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | 说明 |
  92 +|-----------|-----------|---------|---------|-----------|-----------|-------------|------|
  93 +| variants | JSON (nested) | 是 | 嵌套对象 | SKU表 | - | - | 商品变体数组(嵌套结构) |
  94 +
  95 +#### Variants子字段
  96 +
  97 +| 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | 说明 |
  98 +|-----------|-----------|---------|---------|-----------|-----------|-------------|------|
  99 +| variants.variant_id | keyword | 是 | 精确匹配 | SKU表 | id | BIGINT | 变体ID(SKU ID) |
  100 +| variants.title | text | 是 | english | SKU表 | title | VARCHAR(500) | 变体标题 |
  101 +| variants.price | float | 是 | float | SKU表 | price | DECIMAL(10,2) | 变体价格 |
  102 +| variants.compare_at_price | float | 是 | float | SKU表 | compare_at_price | DECIMAL(10,2) | 变体原价 |
  103 +| variants.sku | keyword | 是 | 精确匹配 | SKU表 | sku | VARCHAR(100) | SKU编码 |
  104 +| variants.stock | long | 是 | float | SKU表 | inventory_quantity | INT(11) | 库存数量 |
  105 +| variants.options | object | 是 | 对象 | SKU表 | option1/option2/option3 | VARCHAR(255) | 选项(颜色、尺寸等) |
  106 +
  107 +**Variants结构说明**:
  108 +- `variants` 是一个嵌套对象数组,每个元素代表一个SKU
  109 +- 使用ES的nested类型,支持对嵌套字段进行独立查询和过滤
  110 +- `options` 对象包含 `option1`、`option2`、`option3` 三个字段,分别对应SKU表中的选项值
  111 +
  112 +## 字段类型说明
  113 +
  114 +### ES字段类型映射
  115 +
  116 +| ES字段类型 | Elasticsearch映射 | 用途 |
  117 +|-----------|------------------|------|
  118 +| keyword | keyword | 精确匹配、过滤、聚合、排序 |
  119 +| TEXT | text | 全文检索(支持分词) |
  120 +| FLOAT | float | 浮点数(价格、权重等) |
  121 +| LONG | long | 整数(库存、计数等) |
  122 +| DATE | date | 日期时间 |
  123 +| TEXT_EMBEDDING | dense_vector | 文本向量(1024维) |
  124 +| JSON | object/nested | 嵌套对象 |
  125 +
  126 +### 分析器说明
  127 +
  128 +| 分析器名称 | 语言 | 说明 |
  129 +|-----------|------|------|
  130 +| chinese_ecommerce | 中文 | Ansj中文分词器(电商优化),用于中文文本的分词和搜索 |
  131 +
  132 +## 索引配置
  133 +
  134 +### 索引设置
  135 +
  136 +- **分片数**: 1
  137 +- **副本数**: 0
  138 +- **刷新间隔**: 30秒
  139 +
  140 +### 查询域(Query Domains)
  141 +
  142 +系统定义了多个查询域,用于在不同场景下搜索不同的字段组合:
  143 +
  144 +1. **default(默认索引)**: 搜索所有文本字段
  145 + - 包含字段:title, brief, description, seo_title, seo_description, seo_keywords, vendor, product_type, tags, category
  146 + - Boost: 1.0
  147 +
  148 +2. **title(标题索引)**: 仅搜索标题相关字段
  149 + - 包含字段:title, seo_title
  150 + - Boost: 2.0
  151 +
  152 +3. **vendor(品牌索引)**: 仅搜索品牌字段
  153 + - 包含字段:vendor
  154 + - Boost: 1.5
  155 +
  156 +4. **category(类目索引)**: 仅搜索类目字段
  157 + - 包含字段:category
  158 + - Boost: 1.5
  159 +
  160 +5. **tags(标签索引)**: 搜索标签和SEO关键词
  161 + - 包含字段:tags, seo_keywords
  162 + - Boost: 1.0
  163 +
  164 +## 数据转换规则
  165 +
  166 +### 数据类型转换
  167 +
  168 +1. **BIGINT → keyword**: 数字ID转换为字符串(如 `product_id`, `variant_id`)
  169 +2. **DECIMAL → FLOAT**: 价格字段从DECIMAL转换为FLOAT
  170 +3. **INT → LONG**: 库存数量从INT转换为LONG
  171 +4. **DATETIME → DATE**: 时间字段转换为ISO格式字符串
  172 +
  173 +### 特殊处理
  174 +
  175 +1. **价格聚合**: 从多个SKU的价格中计算min_price、max_price、compare_at_price
  176 +2. **图片URL处理**: 如果image_src不是完整URL,会自动添加协议前缀
  177 +3. **选项合并**: 将SKU表的option1、option2、option3合并为options对象
  178 +
  179 +## 注意事项
  180 +
  181 +1. **多租户隔离**: 所有查询必须包含 `tenant_id` 过滤条件
  182 +2. **嵌套查询**: 查询variants字段时需要使用nested查询语法
  183 +3. **字段命名**: 用于过滤的字段应使用 `*_keyword` 后缀的字段
  184 +4. **向量搜索**: title_embedding字段用于语义搜索,需要配合文本查询使用
  185 +5. **Boost权重**: 不同字段的boost权重影响搜索结果的相关性排序
  186 +
  187 +## 数据来源表结构
  188 +
  189 +### SPU表(shoplazza_product_spu)
  190 +
  191 +主要字段:
  192 +- `id`: BIGINT - 主键ID
  193 +- `tenant_id`: BIGINT - 租户ID
  194 +- `handle`: VARCHAR(255) - URL handle
  195 +- `title`: VARCHAR(512) - 商品标题
  196 +- `brief`: VARCHAR(512) - 商品简介
  197 +- `description`: TEXT - 商品描述
  198 +- `vendor`: VARCHAR(255) - 供应商/品牌
  199 +- `category`: VARCHAR(255) - 类目
  200 +- `tags`: VARCHAR(1024) - 标签
  201 +- `seo_title`: VARCHAR(512) - SEO标题
  202 +- `seo_description`: TEXT - SEO描述
  203 +- `seo_keywords`: VARCHAR(1024) - SEO关键词
  204 +- `image_src`: VARCHAR(500) - 图片URL
  205 +- `create_time`: DATETIME - 创建时间
  206 +- `update_time`: DATETIME - 更新时间
  207 +- `shoplazza_created_at`: DATETIME - 店匠创建时间
  208 +- `shoplazza_updated_at`: DATETIME - 店匠更新时间
  209 +
  210 +### SKU表(shoplazza_product_sku)
  211 +
  212 +主要字段:
  213 +- `id`: BIGINT - 主键ID(对应variant_id)
  214 +- `spu_id`: BIGINT - SPU ID(关联字段)
  215 +- `title`: VARCHAR(500) - 变体标题
  216 +- `price`: DECIMAL(10,2) - 价格
  217 +- `compare_at_price`: DECIMAL(10,2) - 原价
  218 +- `sku`: VARCHAR(100) - SKU编码
  219 +- `inventory_quantity`: INT(11) - 库存数量
  220 +- `option1`: VARCHAR(255) - 选项1
  221 +- `option2`: VARCHAR(255) - 选项2
  222 +- `option3`: VARCHAR(255) - 选项3
  223 +
... ...
docs/搜索API速查表.md
... ... @@ -226,8 +226,3 @@ console.log(`找到 ${result.total} 个结果`);
226 226 ```
227 227  
228 228 ---
229   -
230   -**详细文档**: [API_DOCUMENTATION.md](API_DOCUMENTATION.md)
231   -**更多示例**: [API_EXAMPLES.md](API_EXAMPLES.md)
232   -**在线文档**: http://localhost:6002/docs
233   -
... ...
docs/索引字段说明.md
1 1 # 索引字段说明文档
2 2  
  3 +## 设计思路
  4 +
  5 +1. **针对店匠数据结构**
  6 + - 数据源处理:时间、数值字段的规范化直接在流水线中完成,因为只有一套数据源,不需要配置化;以我们的 SPU/SKU 为标准输入。
  7 + - ES 索引方式:为了可扩展,需要定义多种索引方式,对于每个入 ES 的字段只需从中选择一种索引方式。
  8 +2. **Doc 单位为 SPU**
  9 + - SKU 作为 SPU 的内部属性(ES 的 nested 结构),SKU 的价格字段展开为 `min_price`、`max_price` 作为 SPU 字段。
  10 +3. **多语言适配**
  11 + - 原始数据与用户环境均为多语言,需根据语言路由到不同分析器/索引方式,在线搜索时也要考虑多语言的适配。
  12 +4. **搜索接口适配**
  13 + - 接口简单,自动为多语言的数据源和 query 适配最优检索策略。
  14 + - 返回的结果格式约定为店匠系列的 SPU/SKU(products/variants)嵌套结构。
  15 + - 支撑 facet/过滤/排序业务需求:用户可以选择任何一个 keyword 或 HKText 类型的字段做筛选、聚合;也可以选择任何一个数值型字段做 Range 过滤或排序。
  16 +
3 17 本文档详细说明了 Elasticsearch 索引中所有字段的类型、索引方式、数据来源等信息。
4 18  
5 19 ## 索引基本信息
... ... @@ -8,6 +22,117 @@
8 22 - **索引级别**: SPU级别(商品级别)
9 23 - **数据结构**: SPU文档包含嵌套的variants(SKU)数组
10 24  
  25 +## 索引类型与处理说明
  26 +
  27 +### 文本字段(多语言)
  28 +
  29 +- **电商通用分析-中文**
  30 + ```json
  31 + {
  32 + "type": "text",
  33 + "analyzer": "hanlp_index",
  34 + "search_analyzer": "hanlp_standard"
  35 + }
  36 + ```
  37 +- **电商通用分析-英文**
  38 + ```json
  39 + { "type": "text", "analyzer": "english" }
  40 + ```
  41 +- **电商通用分析-日文**
  42 + ```json
  43 + { "type": "text", "analyzer": "japanese" }
  44 + ```
  45 +- **电商通用分析-阿拉伯文**
  46 + ```json
  47 + { "type": "text", "analyzer": "arabic" }
  48 + ```
  49 +- **电商通用分析-西班牙文**
  50 + ```json
  51 + { "type": "text", "analyzer": "spanish" }
  52 + ```
  53 +- **电商通用分析-俄文**
  54 + ```json
  55 + { "type": "text", "analyzer": "russian" }
  56 + ```
  57 +
  58 +### 文本-多语言向量化
  59 +
  60 +- 调用“文本向量化”模块生成 1024 维向量,适用于标题、描述等语义检索场景。
  61 + ```json
  62 + {
  63 + "type": "dense_vector",
  64 + "dims": 1024,
  65 + "index": true,
  66 + "similarity": "dot_product"
  67 + }
  68 + ```
  69 +
  70 +### 图片-向量化
  71 +
  72 +- 调用“图片向量化”模块生成 1024 维向量,并保留图片 URL 以便回显。
  73 + ```json
  74 + {
  75 + "type": "nested",
  76 + "properties": {
  77 + "vector": {
  78 + "type": "dense_vector",
  79 + "dims": 1024,
  80 + "similarity": "dot_product"
  81 + },
  82 + "url": { "type": "text" }
  83 + }
  84 + }
  85 + ```
  86 +
  87 +### 关键词字段
  88 +
  89 +- ES 输入支持字符串或字符串数组,统一写入 keyword 字段,默认大小写敏感,必要时可通过 normalizer 统一大小写。
  90 + ```json
  91 + { "type": "keyword" }
  92 + ```
  93 +
  94 +### 数值字段
  95 +
  96 +- **整数**:`{ "type": "long" }`
  97 +- **浮点数**:`{ "type": "float" }`
  98 +
  99 +### 日期字段
  100 +
  101 +- 预处理:统一转换为 ISO8601(UTC)字符串或毫秒时间戳;空值保持 null。
  102 +- ES mapping:
  103 + ```json
  104 + {
  105 + "type": "date",
  106 + "format": "strict_date_optional_time||epoch_millis"
  107 + }
  108 + ```
  109 +- 查询:支持范围检索、排序与聚合。
  110 +
  111 +### Hybrid Keyword+Text(HKText)字段
  112 +
  113 +- 该类型用于“精确匹配优先 + 模糊匹配兜底”的业务场景(如品牌、标签、SEO 关键词)。
  114 +- 典型 mapping:
  115 + ```json
  116 + {
  117 + "type": "text",
  118 + "analyzer": "factory_no_ngram_analyzer",
  119 + "search_analyzer": "factory_no_query_analyzer",
  120 + "fields": {
  121 + "keyword": { "type": "keyword", "normalizer": "lowercase" }
  122 + }
  123 + }
  124 + ```
  125 +- 业务命名:**HKText**。使用 `字段.keyword` 子字段满足过滤、聚合等精确需求,主字段支持 ngram 模糊搜索。
  126 +
  127 +### 字段预处理与 ES 输入
  128 +
  129 +1. **文本**:去除首尾空格、控制字符;英文统一小写;中日韩保持原始大小写。
  130 +2. **关键词**:列表字段去重、排序,单值统一转为列表写入后再回填单值,避免重复。
  131 +3. **向量**:落库前完成模型推理,确保维度一致(1024);禁止写入空向量。
  132 +4. **图片向量**:仅对可访问的 HTTPS 资源执行推理,保存 `{vector, url}` 对。
  133 +5. **日期**:全部转 UTC;若原始时区未知,默认视为店铺本地时间并附带 `timezone` 元数据(如有)。
  134 +6. **数值**:保留两位小数再转 float,或直接写 long;空值不写字段。
  135 +
11 136 ## 字段说明表
12 137  
13 138 ### 基础字段
... ... @@ -22,30 +147,30 @@
22 147  
23 148 | 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | Boost权重 | 说明 |
24 149 |-----------|-----------|---------|---------|-----------|-----------|-------------|-----------|------|
25   -| title | TEXT | 是 | chinese_ecommerce分析器 | SPU表 | title | VARCHAR(512) | 3.0 | 商品标题,权重最高 |
26   -| brief | TEXT | 是 | chinese_ecommerce分析器 | SPU表 | brief | VARCHAR(512) | 1.5 | 商品简介 |
27   -| description | TEXT | 是 | chinese_ecommerce分析器 | SPU表 | description | TEXT | 1.0 | 商品详细描述 |
  150 +| title | TEXT | 是 | english | SPU表 | title | VARCHAR(512) | 3.0 | 商品标题,权重最高 |
  151 +| brief | TEXT | 是 | english | SPU表 | brief | VARCHAR(512) | 1.5 | 商品简介 |
  152 +| description | TEXT | 是 | english | SPU表 | description | TEXT | 1.0 | 商品详细描述 |
28 153  
29 154 ### SEO字段
30 155  
31 156 | 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | Boost权重 | 是否返回 | 说明 |
32 157 |-----------|-----------|---------|---------|-----------|-----------|-------------|-----------|---------|------|
33   -| seo_title | TEXT | 是 | chinese_ecommerce分析器 | SPU表 | seo_title | VARCHAR(512) | 2.0 | 否 | SEO标题,用于提升相关性 |
34   -| seo_description | TEXT | 是 | chinese_ecommerce分析器 | SPU表 | seo_description | TEXT | 1.5 | 否 | SEO描述 |
35   -| seo_keywords | TEXT | 是 | chinese_ecommerce分析器 | SPU表 | seo_keywords | VARCHAR(1024) | 2.0 | 否 | SEO关键词 |
  158 +| seo_title | TEXT | 是 | english | SPU表 | seo_title | VARCHAR(512) | 2.0 | 否 | SEO标题,用于提升相关性 |
  159 +| seo_description | TEXT | 是 | english | SPU表 | seo_description | TEXT | 1.5 | 否 | SEO描述 |
  160 +| seo_keywords | HKText | 是 | english(模糊)+keyword(精确) | SPU表 | seo_keywords | VARCHAR(1024) | 2.0 | 否 | SEO关键词,支持模糊匹配+精确过滤 |
36 161  
37 162 ### 分类和标签字段
38 163  
39 164 | 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | Boost权重 | 是否返回 | 说明 |
40 165 |-----------|-----------|---------|---------|-----------|-----------|-------------|-----------|---------|------|
41   -| vendor | TEXT | 是 | chinese_ecommerce分析器 | SPU表 | vendor | VARCHAR(255) | 1.5 | 是 | 供应商/品牌(文本搜索) |
42   -| vendor_keyword | KEYWORD | 是 | 精确匹配 | SPU表 | vendor | VARCHAR(255) | - | 否 | 供应商/品牌(精确匹配,用于过滤) |
43   -| product_type | TEXT | 是 | chinese_ecommerce分析器 | SPU表 | category | VARCHAR(255) | 1.5 | 是 | 商品类型(文本搜索) |
44   -| product_type_keyword | KEYWORD | 是 | 精确匹配 | SPU表 | category | VARCHAR(255) | - | 否 | 商品类型(精确匹配,用于过滤) |
45   -| tags | TEXT | 是 | chinese_ecommerce分析器 | SPU表 | tags | VARCHAR(1024) | 1.0 | 是 | 标签(文本搜索) |
46   -| tags_keyword | KEYWORD | 是 | 精确匹配 | SPU表 | tags | VARCHAR(1024) | - | 否 | 标签(精确匹配,用于过滤) |
47   -| category | TEXT | 是 | chinese_ecommerce分析器 | SPU表 | category | VARCHAR(255) | 1.5 | 是 | 类目(文本搜索) |
48   -| category_keyword | KEYWORD | 是 | 精确匹配 | SPU表 | category | VARCHAR(255) | - | 否 | 类目(精确匹配,用于过滤) |
  166 +| vendor | TEXT | 是 | english | SPU表 | vendor | VARCHAR(255) | 1.5 | 是 | 供应商/品牌(文本搜索) |
  167 +| vendor_keyword | HKText | 是 | 模糊+精确 | SPU表 | vendor | VARCHAR(255) | - | 否 | 供应商/品牌(HKText类型,keyword子字段用于过滤) |
  168 +| product_type | TEXT | 是 | english | SPU表 | category | VARCHAR(255) | 1.5 | 是 | 商品类型(文本搜索) |
  169 +| product_type_keyword | HKText | 是 | 模糊+精确 | SPU表 | category | VARCHAR(255) | - | 否 | 商品类型(HKText类型) |
  170 +| tags | HKText | 是 | 模糊+精确 | SPU表 | tags | VARCHAR(1024) | 1.0 | 是 | 标签(HKText类型,支持搜索+过滤) |
  171 +| tags_keyword | HKText | 是 | 模糊+精确 | SPU表 | tags | VARCHAR(1024) | - | 否 | 标签keyword别名(HKText类型) |
  172 +| category | TEXT | 是 | english | SPU表 | category | VARCHAR(255) | 1.5 | 是 | 类目(文本搜索) |
  173 +| category_keyword | HKText | 是 | 模糊+精确 | SPU表 | category | VARCHAR(255) | - | 否 | 类目(HKText类型) |
49 174  
50 175 ### 价格字段
51 176  
... ... @@ -97,7 +222,7 @@
97 222 | 索引字段名 | ES字段类型 | 是否索引 | 索引方式 | 数据来源表 | 表中字段名 | 表中字段类型 | 说明 |
98 223 |-----------|-----------|---------|---------|-----------|-----------|-------------|------|
99 224 | variants.variant_id | keyword | 是 | 精确匹配 | SKU表 | id | BIGINT | 变体ID(SKU ID) |
100   -| variants.title | text | 是 | chinese_ecommerce分析器 | SKU表 | title | VARCHAR(500) | 变体标题 |
  225 +| variants.title | text | 是 | english | SKU表 | title | VARCHAR(500) | 变体标题 |
101 226 | variants.price | float | 是 | 数值范围 | SKU表 | price | DECIMAL(10,2) | 变体价格 |
102 227 | variants.compare_at_price | float | 是 | 数值范围 | SKU表 | compare_at_price | DECIMAL(10,2) | 变体原价 |
103 228 | variants.sku | keyword | 是 | 精确匹配 | SKU表 | sku | VARCHAR(100) | SKU编码 |
... ... @@ -117,10 +242,12 @@
117 242 |-----------|------------------|------|
118 243 | KEYWORD | keyword | 精确匹配、过滤、聚合、排序 |
119 244 | TEXT | text | 全文检索(支持分词) |
  245 +| HKText | text + keyword子字段 | 精确优先的模糊/过滤混合场景 |
120 246 | FLOAT | float | 浮点数(价格、权重等) |
121 247 | LONG | long | 整数(库存、计数等) |
122 248 | DATE | date | 日期时间 |
123 249 | TEXT_EMBEDDING | dense_vector | 文本向量(1024维) |
  250 +| IMAGE_VECTOR | nested+dense_vector | 图片语义检索(含URL) |
124 251 | JSON | object/nested | 嵌套对象 |
125 252  
126 253 ### 分析器说明
... ... @@ -221,3 +348,25 @@
221 348 - `option2`: VARCHAR(255) - 选项2
222 349 - `option3`: VARCHAR(255) - 选项3
223 350  
  351 +
  352 +## TODO
  353 +多语言问题。
  354 +店匠的products接口返回的 title tags note category seo_title seo_description 等字段,为商家销售区域所使用语言,因此英文为主,各种语言都有。
  355 +不同语言需要用不同的分析器,需要拆分不同的字段。
  356 +
  357 +考虑的方法是:
  358 +1. 索引层面:
  359 +每种文本字段,都设置多份语言索引,暂时先包括 zh en 两种即可。
  360 +以下字段做两份,如果以后对接的商家达到8种语言,那么这些字段也对应的扩展到8份。
  361 +title brief description seo_title seo_description seo_keywords vendor vendor_keyword product_type product_type_keyword category
  362 +
  363 +
  364 +2. tenant - 数据灌入:
  365 +对每个tenant设置一一个语言,作为tenant的一个基本配置。
  366 +写入索引的时候,根据语言配置将title 等文本字段写入对应的索引字段(比如 title_en)
  367 +查询的时候,将query转为商家所用语言,并到对应的field去查。
  368 +
  369 +
  370 +3. 在线搜索时:
  371 +多语言搜索作为效果优化的高级特性,比如某个用户配置了 zh, en 两种语言,那么 如索引的时候会进行不全,入两个字段。
  372 +搜索的时候 也准备 query_en query_zh 两个查询词 分别到多个字段搜索。
... ...