!

This page is not translated yet

The interface, navigation and community content are bilingual. The long-form body of this page is still in Chinese. The translation work is tracked as task I18N-10.

See translation tasks

Module 09 · V1.0 · Search & Discovery

搜索与发现

让沉淀的好内容被重新使用

P1V1.0显著影响体验与增长,紧随其后

模块目标

要达成什么

构建覆盖帖子、评论、社区、用户的多实体搜索,配合筛选、排序、高亮与联想,让历史内容重新产生价值。

为什么必须存在

社区最大的浪费是「优质内容被埋没」。搜索是内容复用率的直接决定因素,也是用户留存与口碑的关键。

功能清单

共 8 个功能点,每个功能点给出实现要点,可直接作为开发任务的描述。

多实体搜索

P0

统一搜索框可搜索帖子、评论、社区、用户,结果分组展示,Tab 切换查看各类型。

实现要点:使用 Meilisearch 多索引(posts / comments / users / pages),查询时并行检索并合并,每组返回前 N 条,点击「查看更多」进入该类型完整结果页。

高级筛选

P1

按社区、作者、时间范围、帖子类型、Flair、标签、分数区间、是否有媒体等条件过滤。

实现要点:筛选条件序列化到 URL query,便于分享与回退。支持保存筛选为「自定义视图」。

搜索排序

P1

相关度(Relevance)、最新、最高分、最多评论四种排序。

实现要点:相关度使用 BM25 + 字段加权(标题权重高于正文)+ 时间衰减与内容质量(分数)作为软加权因子。

中文分词与查询理解

P1

中文分词(IK 分词器)、同义词扩展、拼音搜索、拼写纠错、繁简兼容。

实现要点:建立同义词词典与拼音字段;拼写纠错基于 ES 的 term suggester + 自定义词典。

搜索联想与历史

P2

输入时实时联想(内容标题、社区名、用户名、热门搜索词),并保留个人搜索历史与热搜榜。

实现要点:联想接口单独走极轻量的前缀查询(Redis 前缀树或 ES completion suggester),响应需 ≤ 100ms。

结果高亮与预览

P2

关键词在标题与摘要中高亮;悬停显示内容预览卡片。

实现要点:使用 ES highlight 能力生成高亮片段,前端渲染时对 HTML 做白名单过滤,只允许 <em> 标签。

索引同步

P0

内容变更(创建/编辑/删除)通过消息队列异步同步到 ES,保证最终一致。

实现要点:对失败同步做重试与死信队列;提供全量重建索引的管理员工具。删除使用软删除标记并定期物理清理。

内容屏蔽与合规过滤

P0

搜索需尊重用户的屏蔽设置;被删除内容不进索引;私密社区内容对非成员不可见。

实现要点:索引阶段直接排除私密内容;查询阶段对结果做一次 ACL 过滤(filter by visibility)。

交互设计

2 条关键交互的分步流程,按用户体验顺序描述,可直接作为前端开发与可用性测试脚本。

1

站内搜索

  1. 1

    点击搜索框或按 / 快捷键聚焦;输入 2 个字符后开始联想。

  2. 2

    按回车进入结果页,默认展示「相关度」排序,结果按类型分组 Tab。

  3. 3

    右侧筛选面板可叠加条件,筛选后 URL 同步更新可分享。

  4. 4

    无结果时给出「放宽条件」建议与相似内容推荐。

2

在社区内搜索

  1. 1

    社区页提供「仅在本社区搜索」开关,默认勾选。

  2. 2

    搜索结果顶部明确标注「在 c/xxx 中搜索」,可一键切换为全站搜索。

业务规则

6 条硬性约束。这些规则应当在服务层强校验,而非仅在前端提示。

R01

搜索需登录(防止被爬虫批量抓取),未登录仅可搜索社区与用户。

R02

单用户搜索 QPS 限 5,超出返回 429。

R03

被屏蔽用户的内容不出现在搜索结果中。

R04

已被删除/隐藏状态的内容不进入索引;恢复后重新入索引。

R05

搜索历史保留最近 20 条,可一键清空。

R06

私密社区内容对非成员完全不可检索。

涉及数据表

本模块涉及的 6 张表。完整字段、索引与说明见「数据表设计」页。

竞品参考

本模块的设计参照了哪些产品,具体参照了什么。

V2

V2EX

搜索能力弱是其明显短板,反向说明搜索的重要性。

掘金

掘金

中文分词与联想体验好,适合中文社区参考。

RE

Reddit

支持语法式搜索(subreddit:、author:、flair:),高级用户效率极高。

DI

Discourse

支持高级搜索语法的同时提供可视化筛选面板。

验收指标

本模块交付时应当达到的量化目标。未达标即视为该模块未完成。

搜索响应 P95≤ 300ms
搜索有结果率≥ 90%(非空结果)
结果点击率≥ 40%
索引同步延迟发布 → 可搜索 ≤ 5s

避坑清单

竞品踩过的坑,以及本模块在实现时最容易犯的错误。

  • 索引同步若走同步双写,一次 ES 抖动就会拖垮发帖接口,必须异步。

  • 中文不配分词器会退化为按字匹配,结果质量极差。

  • 搜索必须做 ACL 过滤,否则私密社区内容会从搜索侧泄露。

  • 被删除内容若不从索引移除,会出现「点进去 404」的糟糕体验。