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

2.2 KiB

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(含异常输入用例、多模块命中演示输出)。