f7d3cf70
tangwang
更新文档
|
1
|
# 基础配置指南
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
2
3
4
|
## 概述
|
f7d3cf70
tangwang
更新文档
|
5
|
搜索引擎采用**统一硬编码配置**方案,所有租户共享相同的索引结构和查询配置,无需单独配置。
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
6
7
8
|
## 核心特性
|
f7d3cf70
tangwang
更新文档
|
9
10
11
12
13
|
- **统一索引结构**: 所有租户共享 `search_products` 索引
- **硬编码配置**: 索引 mapping 和查询配置直接硬编码在代码中,无需配置文件
- **SPU级别索引**: 每个ES文档代表一个SPU,包含嵌套的 `skus` 和 `specifications` 数组
- **租户隔离**: 通过 `tenant_id` 字段实现数据隔离
- **多语言支持**: 文本字段支持中英文双语,后端根据 `language` 参数自动选择
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
14
|
|
f7d3cf70
tangwang
更新文档
|
15
|
## 索引结构
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
16
|
|
f7d3cf70
tangwang
更新文档
|
17
|
### Mapping 文件位置
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
18
|
|
f7d3cf70
tangwang
更新文档
|
19
|
`mappings/search_products.json`
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
20
|
|
f7d3cf70
tangwang
更新文档
|
21
|
### 主要字段
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
22
|
|
f7d3cf70
tangwang
更新文档
|
23
24
25
26
|
#### 基础标识
- `tenant_id` (keyword) - 租户ID(必需,用于隔离)
- `spu_id` (keyword) - SPU ID
- `create_time`, `update_time` (date) - 时间字段
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
27
|
|
f7d3cf70
tangwang
更新文档
|
28
29
30
31
32
33
34
|
#### 多语言文本字段
- `title_zh`, `title_en` (text) - 标题(中英文)
- `brief_zh`, `brief_en` (text) - 短描述(中英文)
- `description_zh`, `description_en` (text) - 详细描述(中英文)
- `vendor_zh`, `vendor_en` (text) - 供应商/品牌(中英文,含keyword子字段)
- `category_path_zh`, `category_path_en` (text) - 类目路径(中英文)
- `category_name_zh`, `category_name_en` (text) - 类目名称(中英文)
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
35
|
|
f7d3cf70
tangwang
更新文档
|
36
37
38
39
40
|
#### 类目字段
- `category_id` (keyword) - 类目ID
- `category_name` (keyword) - 类目名称
- `category_level` (integer) - 类目层级
- `category1_name`, `category2_name`, `category3_name` (keyword) - 多级类目
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
41
|
|
f7d3cf70
tangwang
更新文档
|
42
43
44
|
#### 规格和选项
- `specifications` (nested) - 规格列表(name, value, sku_id)
- `option1_name`, `option2_name`, `option3_name` (keyword) - 选项名称
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
45
|
|
f7d3cf70
tangwang
更新文档
|
46
47
48
49
50
51
|
#### 价格和库存
- `min_price`, `max_price`, `compare_at_price` (float) - 价格字段
- `sku_prices` (float) - SKU价格列表(数组)
- `sku_weights` (long) - SKU重量列表(数组)
- `sku_weight_units` (keyword) - SKU重量单位列表(数组)
- `total_inventory` (long) - 总库存
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
52
|
|
f7d3cf70
tangwang
更新文档
|
53
54
55
|
#### 嵌套字段
- `skus` (nested) - SKU详细信息数组
- `image_embedding` (nested) - 图片向量(仅用于搜索)
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
56
|
|
f7d3cf70
tangwang
更新文档
|
57
58
59
60
|
#### 其他
- `tags` (keyword) - 标签列表(数组)
- `image_url` (keyword, index: false) - 主图URL
- `title_embedding` (dense_vector) - 标题向量(仅用于搜索,不返回)
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
61
|
|
f7d3cf70
tangwang
更新文档
|
62
|
## 查询配置
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
63
|
|
f7d3cf70
tangwang
更新文档
|
64
|
### 文本召回字段
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
65
|
|
f7d3cf70
tangwang
更新文档
|
66
67
68
69
70
71
72
73
|
默认同时搜索以下字段(中英文都包含):
- `title_zh^3.0`, `title_en^3.0`
- `brief_zh^1.5`, `brief_en^1.5`
- `description_zh^1.0`, `description_en^1.0`
- `vendor_zh^1.5`, `vendor_en^1.5`
- `category_path_zh^1.5`, `category_path_en^1.5`
- `category_name_zh^1.5`, `category_name_en^1.5`
- `tags^1.0`
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
74
|
|
f7d3cf70
tangwang
更新文档
|
75
|
### 查询架构
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
76
|
|
f7d3cf70
tangwang
更新文档
|
77
|
**结构**: `filters AND (text_recall OR embedding_recall)`
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
78
|
|
f7d3cf70
tangwang
更新文档
|
79
80
81
82
|
- **filters**: 前端传递的过滤条件(永远起作用)
- **text_recall**: 文本相关性召回(同时搜索中英文字段)
- **embedding_recall**: 向量召回(KNN,使用 `title_embedding`)
- **function_score**: 包装召回部分,支持提权字段
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
83
|
|
f7d3cf70
tangwang
更新文档
|
84
|
### Function Score 配置
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
85
|
|
f7d3cf70
tangwang
更新文档
|
86
|
位置: `search/query_config.py` 中的 `FUNCTION_SCORE_CONFIG`
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
87
|
|
f7d3cf70
tangwang
更新文档
|
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
支持的类型:
- `filter_weight`: 条件权重(如新品提权)
- `field_value_factor`: 字段值因子(如销量因子)
- `decay`: 衰减函数(如时间衰减)
## 分面配置
### 默认分面字段
- `category1_name` - 一级类目
- `category2_name` - 二级类目
- `category3_name` - 三级类目
- `specifications` - 规格分面(嵌套聚合,按name分组,然后按value聚合)
### 规格分面说明
`specifications` 使用特殊的嵌套聚合:
- 按 `specifications.name` 分组(如"color"、"size")
- 每个 `name` 下按 `specifications.value` 聚合(如"white"、"black")
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
107
|
|
f7d3cf70
tangwang
更新文档
|
108
|
返回格式:
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
109
110
|
```json
{
|
f7d3cf70
tangwang
更新文档
|
111
112
113
114
115
116
117
|
"field": "specifications.color",
"label": "color",
"type": "terms",
"values": [
{"value": "white", "count": 50},
{"value": "black", "count": 30}
]
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
118
119
120
|
}
```
|
f7d3cf70
tangwang
更新文档
|
121
|
## 返回字段映射
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
122
|
|
f7d3cf70
tangwang
更新文档
|
123
|
后端根据请求的 `language` 参数(`zh` 或 `en`)自动选择对应的中英文字段:
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
124
|
|
f7d3cf70
tangwang
更新文档
|
125
126
|
- `language="zh"`: 优先返回 `*_zh` 字段,如果为空则回退到 `*_en` 字段
- `language="en"`: 优先返回 `*_en` 字段,如果为空则回退到 `*_zh` 字段
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
127
|
|
f7d3cf70
tangwang
更新文档
|
128
129
130
131
132
133
134
|
映射规则:
- `title_zh/en` → `title`
- `brief_zh/en` → `brief`
- `description_zh/en` → `description`
- `vendor_zh/en` → `vendor`
- `category_path_zh/en` → `category_path`
- `category_name_zh/en` → `category_name`
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
135
|
|
f7d3cf70
tangwang
更新文档
|
136
|
## 配置修改
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
137
|
|
f7d3cf70
tangwang
更新文档
|
138
|
### 修改索引结构
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
139
|
|
f7d3cf70
tangwang
更新文档
|
140
141
142
|
编辑 `mappings/search_products.json`,然后:
1. 删除旧索引: `scripts/recreate_and_import.py --recreate`
2. 重新导入数据: `scripts/ingest.sh <tenant_id> true`
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
143
|
|
f7d3cf70
tangwang
更新文档
|
144
|
### 修改查询配置
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
145
|
|
f7d3cf70
tangwang
更新文档
|
146
147
148
149
|
编辑 `search/query_config.py`:
- `DEFAULT_MATCH_FIELDS`: 文本召回字段列表
- `FUNCTION_SCORE_CONFIG`: Function score 配置
- `DEFAULT_FACETS`: 默认分面字段
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
150
|
|
f7d3cf70
tangwang
更新文档
|
151
|
### 修改返回字段
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
152
|
|
f7d3cf70
tangwang
更新文档
|
153
|
编辑 `search/query_config.py` 中的 `SOURCE_FIELDS` 列表。
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
154
155
156
|
## 注意事项
|
f7d3cf70
tangwang
更新文档
|
157
158
159
160
161
162
|
1. **无需配置文件**: 所有配置都是硬编码的,不需要为每个租户创建配置文件
2. **统一结构**: 所有租户共享相同的索引结构和查询逻辑
3. **多租户隔离**: 所有查询必须包含 `tenant_id` 过滤条件
4. **向量字段**: `title_embedding` 和 `image_embedding` 仅用于搜索,不会返回给前端
## 相关文档
|
1f6d15fa
tangwang
重构:SPU级别索引、统一索引架构...
|
163
|
|
f7d3cf70
tangwang
更新文档
|
164
165
166
|
- `索引字段说明v2.md` - 详细的字段说明
- `搜索API对接指南.md` - API使用说明
- `mappings/search_products.json` - 索引 mapping 定义
|