Commit ec44ff39b8c624753afed9abfb56ee82c7134c22
1 parent
bf4968cf
文档完善
Showing
3 changed files
with
387 additions
and
20 deletions
Show diff stats
| ... | ... | @@ -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
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 两个查询词 分别到多个字段搜索。 | ... | ... |