Blame view

docs/搜索API对接指南-速查表.md 9.9 KB
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} 个结果`);
  ```
  
  ---