资讯文章 资讯 · NEWS
用户打拼音、打错字、少打一个字:目录站站内搜索的容错该做到哪一步
2026-10-23 约 1,166 字 预计阅读 3 分钟 yiyunkj
用
把搜索引擎那套思路搬进站内搜索,第一步就错了。搜索引擎的查询词是别人想好了打出来的,搜不到会换词再搜一遍;站内搜索面对的是已经在你站上的人,页面摆在那儿他没点,转头去搜,说明导航已经失败一次了。再让他搜不到,人就走了。

图片来源:网络,版权归原作者所有,侵权请联系删除
先分清三类「没搜到」
用户输错的样子就那么几种,处理方式完全不同,混在一起做必然乱:
| 类型 | 典型输入 | 处理方式 |
|---|---|---|
| 拼音 | zhihu、bilbili | 映射到候选站名 |
| 错字与多音字 | 站名里换了一个字 | 编辑距离 + 同义词表 |
| 半截词与别称 | 只打了品牌前两个字 | 前缀匹配 + 别名表 |
还有第四种,严格说不是输错:用户搜的东西你站上根本没有。这类只能靠零结果页兜底,容错帮不上忙,别指望用模糊匹配去凑一个不相干的结果出来。
拼音:两种做法,代价不一样
最省事的是给条目加一个拼音字段。收录的时候顺手生成全拼和首字母两项,存进表里,搜索时把输入同时拿去匹配站名字段和拼音字段。好处是结果可控,坏处是老条目要补一遍数据,而且多音字和生僻字会漏。
另一种是在查询侧做转换,把输入转成拼音再去比。省掉了数据补录,但中文和拼音混着输的时候容易出鬼结果,比如搜「设计 素材」会被拆得乱七八糟。
对几千条量级的目录站,第一种更划算。拼音字段是死的,改一次用很久,而且它还能顺带解决排序问题——全拼完全命中的排在前面,首字母命中的往后放。
错字容错别贪心
编辑距离是最常用的办法,也就是算两个词差几个字符。但它有两个坑。一是阈值松了会串味:改一个字能容忍,改两个字的「知乎」和「微博」也能互相命中,用户看到一堆不相关的结果,比看到零结果更懵。二是中文按字算距离,两个字站名改一个字就是 50% 的差异,跟英文的体验完全不同。
能靠同义词表解决的,不要靠算法硬算。站名的常见别称、简称、英文名是有限的,写进表里既准确又好维护。
容错和联想词是两回事
很多人把这两件事做在一起,结果联想词下拉里塞满了模糊匹配出来的怪东西。区别很简单:联想词是提示,容错是替换。联想词只在用户输入过程中出现,点不点由用户决定;容错是系统替用户改了查询词,改完要老老实实告诉他「显示的是某某的结果」,并且留一个「仍然搜索原词」的入口。
把这句提示写上,比把算法调准更重要。用户知道系统改了他的词,才会信任结果;不告诉他,他会以为你的站搜不准。
三处容易做过头的地方
- 把所有查询都走一遍模糊匹配——精确命中优先,模糊只在精确没有结果时兜底,别反过来。
- 容错结果不标注来源——改了词就要说,否则等于骗用户。
- 把容错结果也算进热搜榜——搜得多的词里混进一堆被纠正过的错误写法,榜单就废了。
做完要能验证
拿站内搜索日志里那些零结果的词,每个类别挑二十条,人工过一遍看容错后能不能出结果、出的对不对。这个数字比任何指标都实在:能救回来三成就算及格,救回来六成说明前面的分类和数据有问题,不是搜索的锅。