站内搜索的相关搜索词推荐,核心不是简单展示热门词,而是在用户输入一个查询词后,快速判断他下一步可能需要什么:是继续比较、寻找配件、缩小条件,还是切换到更准确的长尾词。
一个稳定的实现方案通常由三部分组成:用搜索日志发现候选词,用相关度模型判断候选词是否真的相关,再用点击、转化和业务规则做重排。这样推荐出来的词既能扩大用户探索路径,也能减少无结果搜索和反复输入。

适用场景
相关搜索词推荐适合搜索量相对稳定、用户意图会连续变化的网站,例如电商、内容站、素材站、知识库、工具导航和站内文档系统。常见展示位置包括搜索结果页顶部、无结果页、搜索框联想区,以及详情页底部的“相关搜索”模块。
如果网站刚开始积累数据,可以先用规则和热词兜底;当搜索日志、点击日志和会话数据达到一定规模后,再逐步引入共现矩阵、向量相似度和点击重排。
数据准备
实现前需要先定义一套可追踪的数据结构,至少包括以下字段:
query:用户输入的原始搜索词。normalized_query:清洗、大小写统一、繁简转换或同义词归一后的搜索词。session_id:同一次访问或同一段时间窗口内的会话标识。result_count:该搜索词返回的结果数量,用来识别无结果或低质量词。click_doc_id:用户点击的结果内容,用于判断推荐是否带来有效行动。timestamp:搜索时间,用来计算新鲜度和趋势变化。
清洗阶段要重点处理空词、乱码词、明显广告词、敏感词、重复词,以及仅有标点或过短的词。中文场景还可以维护同义词表,例如“耳机”和“蓝牙耳机”不一定等价,但“iPhone 手机壳”和“苹果手机壳”可能需要归到相近意图。
核心算法:召回、相关度与重排
第一步是候选召回。最常用的方法是统计同一会话、同一用户短时间窗口或同一搜索链路中共同出现的查询词,建立查询词之间的共现关系。例如用户先搜“iPhone”,接着搜“手机壳”或“耳机”,就可以把这些词放入候选集合。
第二步是相关度计算。只看共现次数容易偏向大热词,因此可以加入 PMI 或余弦相似度:
PMI(x, y) = log( P(x, y) / (P(x) * P(y)) )
PMI 更擅长发现“虽然不算特别热门,但关联非常紧”的词;余弦相似度适合把查询词表示成点击内容、类目或用户行为向量后再比较相似度。实际工程中可以把多个信号合并为一个推荐分:
score = 相关性 * 0.45 + 热度 * 0.25 + 点击率 * 0.20 + 新鲜度 * 0.10
第三步是重排与过滤。推荐词需要去重、去低质、去敏感词,并限制同一类目或同一前缀词的数量,避免用户看到一排高度重复的词。对于长尾词,可以设置最低曝光保护,防止所有推荐位都被头部热词占满。

电商案例
假设一个电商站点记录到以下搜索链路:
| 用户 | 第一次搜索 | 后续搜索 |
|---|---|---|
| 用户 1 | iPhone | 手机壳 |
| 用户 2 | iPhone | 耳机 |
| 用户 3 | 手机壳 | 保护膜 |
| 用户 4 | 耳机 | 蓝牙耳机 |
可以得到一个简化的共现矩阵:
| 查询词 | iPhone | 手机壳 | 耳机 | 保护膜 | 蓝牙耳机 |
|---|---|---|---|---|---|
| iPhone | - | 1 | 1 | 0 | 0 |
| 手机壳 | 1 | - | 0 | 1 | 0 |
| 耳机 | 1 | 0 | - | 0 | 1 |
| 保护膜 | 0 | 1 | 0 | - | 0 |
| 蓝牙耳机 | 0 | 0 | 1 | 0 | - |
在这个例子里,当用户搜索“iPhone”时,可以优先推荐“手机壳”“耳机”;当用户搜索“耳机”时,可以推荐“蓝牙耳机”和“iPhone”。如果后续点击数据显示“iPhone + 手机壳”的点击率更高,就可以把“手机壳”排在更靠前的位置。
上线与评估
相关搜索词推荐上线后,建议按天观察这些指标:
- 推荐词点击率:判断推荐是否吸引用户继续搜索。
- 无结果率:推荐词是否减少了空搜索和失败搜索。
- 搜索后点击率:用户点了推荐词之后,是否点击了结果内容。
- 转化或停留时间:电商看加购和成交,内容站看阅读深度。
- 负反馈词占比:识别低质词、错别字词和不合规词。
推荐结果不必追求一次性完全自动化。更稳妥的方式是“算法生成 + 规则兜底 + 人工抽检”:高频词可以人工查看前若干个推荐结果,低频词则依靠阈值、黑名单和类目约束保证质量。
总结
站内搜索相关搜索词推荐的关键,是把用户真实行为转化成可解释、可评估的推荐链路。先通过共现和向量方法找到候选词,再结合热度、点击率、新鲜度和业务规则排序,最后用上线指标持续修正,才能让推荐词既有相关性,也真正提升搜索体验和网站粘性。