- 新增 `suggestion` 模块:
- `suggestion/mapping.py`:`search_suggestions` mapping 生成(多语言 `completion` + `search_as_you_type`)
- `suggestion/builder.py`:全量构建程序(扫描 `search_products` 的 `title/qanchors` + MySQL `shoplazza_search_log`)
- `suggestion/service.py`:在线查询服务(suggestion 检索 + 结果直达商品二次查询)
- `suggestion/__init__.py`
- 接入 API 服务初始化:
- `api/app.py` 新增 `SuggestionService` 初始化和 `get_suggestion_service()`
- 接口实现:
- `api/routes/search.py` 的 `GET /search/suggestions` 从“空框架”改为真实调用
- 支持参数:
- `q`, `size`, `language`
- `with_results`(是否直达商品)
- `result_size`(每条 suggestion 商品数)
- `debug`
- 继续要求 `X-Tenant-ID`(或 query 的 `tenant_id`)
- 模型补充:
- `api/models.py` 增加 suggestion 请求/响应字段(`language`, `resolved_language`, `with_results`, `result_size`)
- CLI 全量构建命令:
- `main.py` 新增 `build-suggestions`
- 使用方式:
- `python main.py build-suggestions --tenant-id 1 --recreate`
- 可选:`--days 30 --batch-size 500 --min-query-len 1 --es-host ...`
---
关键实现逻辑(已编码)
- 语言归属优先级(按你要求):
- `shoplazza_search_log.language` > `request_params.language` > 脚本/模型兜底
- 候选词聚合键:
- `(tenant_id, lang, text_norm)`(文档唯一)
- 评分:
- 基于 `query_count_30d/7d + qanchor_doc_count + title_doc_count` 的离线分
- 结果直达:
- 对每条 suggestion 在 `search_products_tenant_{id}` 做二次查询(`qanchors/title` 组合)
---
变更文件
- `api/app.py`
- `api/models.py`
- `api/routes/search.py`
- `main.py`
- `suggestion/__init__.py`
- `suggestion/mapping.py`
- `suggestion/builder.py`
- `suggestion/service.py`