Files
vscode-workbench/PLANNING/tasks/C-07-全站统一搜索.md
T

47 lines
2.2 KiB
Markdown

# C-07 · 全站统一搜索
| 字段 | 值 |
|---|---|
| 项目 | 可乐工具 · 后端 `search` app + `chunyu_project_react` |
| 优先级 | P1 · M3 |
| 建议模型 | deepseek-v4.1-flash(主)/ qwen3.8-flash(边界复核) |
| 依赖 | C-01(路由稳定) |
| 预估 | 2 天 |
## 一、背景(为什么做)
1. 页面健康检查发现:`/search` 路由被后端劫持且"原始 JSON 直接显示"——搜索页体验破损(C-01 修路由,本卡修体验)。
2. 后端 `search` app 已存在(INSTALLED_APPS 已注册),但前端无统一搜索页;四合一平台(工具/课程/文章/API)**没有跨模块检索**——用户找东西只能靠分模块翻页。
3. 竞品对照:菜鸟工具/掘金的搜索都是全站入口级功能。
## 二、目标(交付物)
**后端**
- 统一搜索端点:`GET /api/search/all?q=xxx&types=tool,article,course,api&page=1`
- 分类型返回聚合结果 + 各类型命中计数
- 复用现有各 app 的检索字段(精确优先 → 前缀 → 包含;PG 环境可用 icontains/全文;按项目现有 DB 能力落地)
- 空结果优雅返回(不 500——参考 EnglishDrill 值收口教训,`q` 长度/类型先收口)
- 边界防护:`q` 超长截断、特殊字符转义、`types` 白名单
**前端**
- 全局搜索框升级(导航栏):输入 → 防抖 → 下拉预览(每个类型 Top3)→ Enter 进 `/search?q=`
- `/search` 结果页:类型筛选 Tab(全部/工具/文章/课程/API)+ 分页 + 高亮命中词 + 空态
## 三、验收标准
- [ ] 一个关键词能同时命中多模块并分组展示
- [ ] 类型筛选、分页正确;命中计数准确
- [ ] `q` 为超长串/特殊字符/数组/数字等异常输入不 500(健壮性用例)
- [ ] 导航栏搜索框在全部页面可用(移动端适配)
- [ ] 既有测试全绿 + 新增 ≥8 用例
## 四、边界(不许做)
- 不引入 Elasticsearch/外部搜索服务(项目复杂度预算:PG/SQLite 能力内解决)
- 不改各模块自身列表接口
- 不做搜索词推荐/热度(另一张卡的空间)
## 五、交接
写 `PROGRESS_C-07.md`(含异常输入用例、多模块命中演示输出)。