站内搜索的相关搜索词推荐,核心不是简单展示热门词,而是在用户输入一个查询词后,快速判断他下一步可能需要什么:是继续比较、寻找配件、缩小条件,还是切换到更准确的长尾词。

一个稳定的实现方案通常由三部分组成:用搜索日志发现候选词,用相关度模型判断候选词是否真的相关,再用点击、转化和业务规则做重排。这样推荐出来的词既能扩大用户探索路径,也能减少无结果搜索和反复输入。

站内搜索相关搜索词推荐算法封面

适用场景

相关搜索词推荐适合搜索量相对稳定、用户意图会连续变化的网站,例如电商、内容站、素材站、知识库、工具导航和站内文档系统。常见展示位置包括搜索结果页顶部、无结果页、搜索框联想区,以及详情页底部的“相关搜索”模块。

如果网站刚开始积累数据,可以先用规则和热词兜底;当搜索日志、点击日志和会话数据达到一定规模后,再逐步引入共现矩阵、向量相似度和点击重排。

数据准备

实现前需要先定义一套可追踪的数据结构,至少包括以下字段:

  • 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 + 手机壳”的点击率更高,就可以把“手机壳”排在更靠前的位置。

上线与评估

相关搜索词推荐上线后,建议按天观察这些指标:

  • 推荐词点击率:判断推荐是否吸引用户继续搜索。
  • 无结果率:推荐词是否减少了空搜索和失败搜索。
  • 搜索后点击率:用户点了推荐词之后,是否点击了结果内容。
  • 转化或停留时间:电商看加购和成交,内容站看阅读深度。
  • 负反馈词占比:识别低质词、错别字词和不合规词。

推荐结果不必追求一次性完全自动化。更稳妥的方式是“算法生成 + 规则兜底 + 人工抽检”:高频词可以人工查看前若干个推荐结果,低频词则依靠阈值、黑名单和类目约束保证质量。

总结

站内搜索相关搜索词推荐的关键,是把用户真实行为转化成可解释、可评估的推荐链路。先通过共现和向量方法找到候选词,再结合热度、点击率、新鲜度和业务规则排序,最后用上线指标持续修正,才能让推荐词既有相关性,也真正提升搜索体验和网站粘性。