6aa246be
tangwang
问题:Pydantic 应该能自动...
|
1
2
|
# API 快速参考 (v3.0)
|
1c5366f5
tangwang
query分析性能优化
|
3
4
5
6
7
8
9
10
11
12
13
|
## 环境与 cURL
- **默认地址**:`http://localhost:6002`(与仓库 `scripts/start_backend.sh` 一致)。
- **租户**:必须使用请求头 **`X-Tenant-ID`**(推荐);一般不要依赖把 `tenant_id` 放在 URL 上。
- 下列命令假设已设置:
```bash
export BASE_URL="${BASE_URL:-http://localhost:6002}"
export TENANT_ID="${TENANT_ID:-163}" # 改成你的租户ID
```
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
14
15
16
|
## 基础搜索
```bash
|
1c5366f5
tangwang
query分析性能优化
|
17
18
19
20
21
22
23
24
25
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "芭比娃娃",
"size": 20,
"from": 0,
"language": "zh"
}'
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
26
27
|
```
|
1c5366f5
tangwang
query分析性能优化
|
28
29
|
等同请求:`POST /search/`,请求体含 `query`、`size`、`from`、`language`。
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
30
31
32
33
|
---
## 精确匹配过滤
|
1c5366f5
tangwang
query分析性能优化
|
34
35
|
在 `POST /search/` 的 JSON 里使用 `filters`(下面示例与「完整示例」可对照字段含义):
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
36
|
```bash
|
1c5366f5
tangwang
query分析性能优化
|
37
38
39
40
41
42
43
44
45
46
47
48
49
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "手机",
"size": 10,
"language": "zh",
"filters": {
"category_name": "手机",
"category1_name": "服装",
"vendor.zh.keyword": ["奇乐", "品牌A"],
"tags": "手机",
"specifications": {"name": "color", "value": "white"}
|
f7d3cf70
tangwang
更新文档
|
50
|
}
|
1c5366f5
tangwang
query分析性能优化
|
51
|
}'
|
f7d3cf70
tangwang
更新文档
|
52
53
54
55
|
```
### Specifications 过滤
|
1c5366f5
tangwang
query分析性能优化
|
56
57
|
**单个规格**:
|
f7d3cf70
tangwang
更新文档
|
58
|
```bash
|
1c5366f5
tangwang
query分析性能优化
|
59
60
61
62
63
64
65
66
67
68
69
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "手机",
"size": 10,
"language": "zh",
"filters": {
"specifications": {"name": "color", "value": "white"}
}
}'
|
f7d3cf70
tangwang
更新文档
|
70
71
|
```
|
1c5366f5
tangwang
query分析性能优化
|
72
73
|
**多个规格(不同 name 为 AND)**:
|
f7d3cf70
tangwang
更新文档
|
74
|
```bash
|
1c5366f5
tangwang
query分析性能优化
|
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "手机",
"size": 10,
"language": "zh",
"filters": {
"specifications": [
{"name": "color", "value": "white"},
{"name": "size", "value": "256GB"}
]
}
}'
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
89
|
```
|
85f08823
tangwang
过滤逻辑
|
90
|
说明:不同维度(不同name)是AND关系,相同维度(相同name)的多个值是OR关系。
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
91
92
93
94
95
96
|
---
## 范围过滤
```bash
|
1c5366f5
tangwang
query分析性能优化
|
97
98
99
100
101
102
103
104
105
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "玩具",
"size": 20,
"language": "zh",
"range_filters": {
"min_price": {"gte": 50, "lte": 200}
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
106
|
}
|
1c5366f5
tangwang
query分析性能优化
|
107
|
}'
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
108
109
110
111
112
113
114
115
116
117
118
|
```
**操作符**: `gte` (>=), `gt` (>), `lte` (<=), `lt` (<)
---
## 分面搜索
### 简单模式
```bash
|
1c5366f5
tangwang
query分析性能优化
|
119
120
121
122
123
124
125
126
127
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "玩具",
"size": 20,
"language": "zh",
"facets": ["category1_name", "category2_name", "category3_name", "specifications"]
}'
|
f7d3cf70
tangwang
更新文档
|
128
129
130
131
|
```
### Specifications 分面
|
1c5366f5
tangwang
query分析性能优化
|
132
133
|
**所有规格名称**:
|
f7d3cf70
tangwang
更新文档
|
134
|
```bash
|
1c5366f5
tangwang
query分析性能优化
|
135
136
137
138
139
140
141
142
143
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "手机",
"size": 10,
"language": "zh",
"facets": ["specifications"]
}'
|
f7d3cf70
tangwang
更新文档
|
144
145
|
```
|
1c5366f5
tangwang
query分析性能优化
|
146
147
|
**指定规格名称**:
|
f7d3cf70
tangwang
更新文档
|
148
|
```bash
|
1c5366f5
tangwang
query分析性能优化
|
149
150
151
152
153
154
155
156
157
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "手机",
"size": 10,
"language": "zh",
"facets": ["specifications.color", "specifications.size", "specifications.material"]
}'
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
158
159
160
161
162
|
```
### 高级模式
```bash
|
1c5366f5
tangwang
query分析性能优化
|
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "手机",
"size": 20,
"language": "zh",
"facets": [
{"field": "category1_name", "size": 15},
{
"field": "min_price",
"type": "range",
"ranges": [
{"key": "0-50", "to": 50},
{"key": "50-100", "from": 50, "to": 100}
]
},
"specifications",
"specifications.color",
"specifications.size",
"specifications.material"
]
}'
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
186
187
188
189
|
```
---
|
ca91352a
tangwang
更新文档
|
190
191
192
193
194
|
## SKU筛选维度
**功能**: 按指定维度对每个SPU下的SKU进行分组,每组只返回第一个SKU。
```bash
|
1c5366f5
tangwang
query分析性能优化
|
195
196
197
198
199
200
201
202
203
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "芭比娃娃",
"size": 20,
"language": "zh",
"sku_filter_dimension": ["color"]
}'
|
ca91352a
tangwang
更新文档
|
204
205
|
```
|
1c5366f5
tangwang
query分析性能优化
|
206
207
|
(`sku_filter_dimension` 为数组;按颜色筛选时需索引里 `option*_name` 与维度一致,见正文说明。)
|
ca91352a
tangwang
更新文档
|
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
**支持的维度值**:
- `option1`, `option2`, `option3`: 直接使用选项字段
- 规格名称(如 `color`, `size`): 通过 `option1_name`、`option2_name`、`option3_name` 匹配
**示例**:
```bash
// 按选项1筛选
{"sku_filter_dimension": "option1"}
// 按颜色筛选(如果option1_name="color")
{"sku_filter_dimension": "color"}
// 按尺寸筛选(如果option2_name="size")
{"sku_filter_dimension": "size"}
```
**性能说明**: 在应用层过滤,不影响ES查询性能,只对返回结果进行过滤。
---
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
228
229
230
|
## 排序
```bash
|
1c5366f5
tangwang
query分析性能优化
|
231
232
233
234
235
236
237
238
239
240
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "玩具",
"size": 20,
"language": "zh",
"sort_by": "min_price",
"sort_order": "asc"
}'
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
241
242
243
244
|
```
---
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
245
246
247
|
## 分页
```bash
|
1c5366f5
tangwang
query分析性能优化
|
248
249
250
251
252
253
254
255
256
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "手机",
"size": 20,
"from": 20,
"language": "zh"
}'
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
257
258
|
```
|
1c5366f5
tangwang
query分析性能优化
|
259
260
|
(第 1 页 `from: 0`,第 2 页 `from: 20`,以此类推。)
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
261
262
263
264
|
---
## 完整示例
|
1c5366f5
tangwang
query分析性能优化
|
265
266
|
一键联调:过滤 + 区间 + 分面 + 排序 + SKU 维度(请按实际类目/规格改 `filters`)。
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
267
|
```bash
|
1c5366f5
tangwang
query分析性能优化
|
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
|
curl -sS "$BASE_URL/search/" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"query": "手机",
"size": 20,
"from": 0,
"language": "zh",
"filters": {
"category_name": "手机",
"category1_name": "电子产品",
"specifications": {"name": "color", "value": "white"}
},
"range_filters": {
"min_price": {"gte": 50, "lte": 200}
},
"facets": [
{"field": "category1_name", "size": 15},
{"field": "category2_name", "size": 15},
"specifications.color",
"specifications.size"
],
"sort_by": "min_price",
"sort_order": "asc",
"sku_filter_dimension": ["color"]
}'
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
294
295
296
297
|
```
---
|
1c5366f5
tangwang
query分析性能优化
|
298
|
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
299
300
301
302
|
## 响应格式
```json
{
|
f7d3cf70
tangwang
更新文档
|
303
|
"results": [
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
304
|
{
|
f7d3cf70
tangwang
更新文档
|
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
|
"spu_id": "12345",
"title": "商品标题",
"brief": "短描述",
"description": "详细描述",
"vendor": "供应商",
"category": "类目",
"category_path": "类目/路径",
"category_name": "类目名称",
"category1_name": "一级类目",
"category2_name": "二级类目",
"category3_name": "三级类目",
"tags": ["标签1", "标签2"],
"price": 99.99,
"compare_at_price": 149.99,
"sku_prices": [99.99, 109.99],
"total_inventory": 500,
"specifications": [
{"sku_id": "sku_001", "name": "color", "value": "white"}
],
|
ca91352a
tangwang
更新文档
|
324
|
"skus": [...], // 如果指定了sku_filter_dimension,则返回过滤后的SKU(每个维度值一个)
|
f7d3cf70
tangwang
更新文档
|
325
|
"relevance_score": 8.5
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
326
327
328
329
330
331
332
|
}
],
"total": 118,
"max_score": 8.5,
"took_ms": 45,
"facets": [
{
|
f7d3cf70
tangwang
更新文档
|
333
334
|
"field": "category1_name",
"label": "category1_name",
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
335
336
337
|
"type": "terms",
"values": [
{
|
f7d3cf70
tangwang
更新文档
|
338
339
|
"value": "手机",
"label": "手机",
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
340
341
342
343
|
"count": 85,
"selected": false
}
]
|
f7d3cf70
tangwang
更新文档
|
344
345
346
347
348
349
350
351
352
353
354
355
356
|
},
{
"field": "specifications.color",
"label": "color",
"type": "terms",
"values": [
{
"value": "white",
"label": "white",
"count": 30,
"selected": false
}
]
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
357
358
359
360
361
362
363
364
365
|
}
]
}
```
---
## 其他端点
|
1c5366f5
tangwang
query分析性能优化
|
366
367
|
**图搜**(`POST /search/image`,与文本搜一样带 `X-Tenant-ID`):
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
368
|
```bash
|
1c5366f5
tangwang
query分析性能优化
|
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
|
curl -sS "$BASE_URL/search/image" \
-H "Content-Type: application/json" \
-H "X-Tenant-ID: $TENANT_ID" \
-d '{
"image_url": "https://example.com/product.jpg",
"size": 20,
"range_filters": {
"min_price": {"gte": 10, "lte": 500}
}
}'
```
(图搜请求体仅支持 `image_url`、`size`、可选的 `filters` / `range_filters`;与文本搜的 `language` / `from` 无关。)
**搜索建议**:
```bash
curl -sS -G "$BASE_URL/search/suggestions" \
--data-urlencode "q=芭" \
--data-urlencode "size=5" \
--data-urlencode "language=zh" \
-H "X-Tenant-ID: $TENANT_ID"
```
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
392
|
|
1c5366f5
tangwang
query分析性能优化
|
393
|
**即时搜索**(当前实现返回 501,勿用于生产):
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
394
|
|
1c5366f5
tangwang
query分析性能优化
|
395
396
397
398
399
400
|
```bash
curl -sS -G "$BASE_URL/search/instant" \
--data-urlencode "q=玩具" \
--data-urlencode "size=5" \
-H "X-Tenant-ID: $TENANT_ID"
```
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
401
|
|
1c5366f5
tangwang
query分析性能优化
|
402
|
**按文档 ID 取详情**(将 `YOUR_SPU_ID` 换成真实 `spu_id`):
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
403
|
|
1c5366f5
tangwang
query分析性能优化
|
404
405
406
407
408
409
410
411
412
413
414
|
```bash
curl -sS "$BASE_URL/search/YOUR_SPU_ID" \
-H "X-Tenant-ID: $TENANT_ID"
```
**运维**:
```bash
curl -sS "$BASE_URL/admin/health"
curl -sS "$BASE_URL/admin/config"
curl -sS "$BASE_URL/admin/stats" -H "X-Tenant-ID: $TENANT_ID"
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
415
416
417
418
|
```
---
|
1c5366f5
tangwang
query分析性能优化
|
419
|
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
420
421
422
423
424
|
## Python 快速示例
```python
import requests
|
f7d3cf70
tangwang
更新文档
|
425
426
427
428
429
430
431
432
433
434
435
436
437
|
result = requests.post(
'http://localhost:6002/search/',
headers={'X-Tenant-ID': '2'},
json={
"query": "手机",
"language": "zh",
"filters": {"category_name": "手机"},
"range_filters": {"min_price": {"gte": 50, "lte": 200}},
"facets": ["category1_name", "specifications"],
"sort_by": "min_price",
"sort_order": "asc"
}
).json()
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
438
439
440
441
442
443
444
445
446
447
448
|
print(f"找到 {result['total']} 个结果")
```
---
## JavaScript 快速示例
```javascript
const result = await fetch('http://localhost:6002/search/', {
method: 'POST',
|
f7d3cf70
tangwang
更新文档
|
449
450
451
452
|
headers: {
'Content-Type': 'application/json',
'X-Tenant-ID': '2'
},
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
453
|
body: JSON.stringify({
|
f7d3cf70
tangwang
更新文档
|
454
455
456
457
458
|
query: "手机",
language: "zh",
filters: {category_name: "手机"},
range_filters: {min_price: {gte: 50, lte: 200}},
facets: ["category1_name", "specifications"],
|
cd3799c6
tangwang
tenant2 1w测试数据 mo...
|
459
|
sort_by: "min_price",
|
6aa246be
tangwang
问题:Pydantic 应该能自动...
|
460
461
462
463
464
465
466
467
|
sort_order: "asc"
})
}).then(r => r.json());
console.log(`找到 ${result.total} 个结果`);
```
---
|