1. 背景
不管是全文搜索引擎,还是垂直搜索系统中,当用户在搜索🔍输入框中输入几个字的时候,会自动下来一些词去自动补全用户可能要搜的词语,这部分的功能,我们称作搜索建议器的功能(英文叫做"suggest")。本文将介绍下目前主流的搜索建议器的做法,并且给出了一个我们认为更好的搜索建议器的做法。
2. 搜索建议器的指导原则
这里,我们给出如下搜索联想词指导原则:
- 搜索联想词的个数是非常有限的,所以必须尽量有效
- 搜索联想词应该是能够最贴近用户想要的结果
- 搜索联想出来的词应该是能够**99%**搜索到商品
- 搜索联想词能够帮用户纠正一些错误
3. 搜索建议器实现功能
在这部分我们给出了搜索建议器需要实现的功能,这部分功能不仅是程序员需要考虑能够实现的功能,也可以用于测试用于进行验证搜索建议器的功能是否能够满足基本的使用要求。
具体例子如下:
-
苹果=》 在A市,不应该出现"苹果醋",在深圳和广州应该出现“苹果醋”( 因为“苹果醋”只在广州和深圳有卖)即搜索建议词具有区域性 -
平果=》 纠错成"苹果",即拼音纠错 -
PingGUO=> 出现苹果,即归一化输入词 -
pinguo=》出现苹果,即后鼻音纠错 -
pg=> 出现pg开头的拼音的前缀,即首字母返回 -
虾n=》不应该出现“鲜花”,即不能将虾n,转成xian去查询 -
虾r=》 出现“虾仁”,即汉字和首字母可出现正确的词 -
长f奶=> 不出现结果,这里不出现是因为要汉字和字母要连着,不能中间插入字母 -
chanfuzhangfu=》应该可以出现“长富”,即支持多音字搜索 -
Kafeii=》 出现咖啡(基于编辑距离进行纠正,推荐大于5个字母才进行) -
白萝卜、白罗卜=》 只出现白萝卜皇上皇 煌上煌的问题,即建议词只出现正确的词 -
囗
=> 纠错成口`,出现口罩相关的名词,即把手写错误的词能够纠正过来祙=> 纠错成袜 -
牛奶=》 深圳地区会出现"燕塘牛奶"相关,长沙地区出现"花园牛奶" -
蘋果=> 繁体字也能够搜索出结果,这个也是通过词归一化处理
4. 搜索建议词需要考虑的因素
- 建议词的来源可以是商品的分类名称、品牌名称、热搜词,也可以是一些组合词,还可以是一些自定义添加的词。
- 搜索建议词需要考虑去重,比如:“QQ”和"qq"应该是相同的。
- 搜索建议词每个词关联的商品个数,为了避免对用户搜索的影响。因此在凌晨执行,并且使用单线程调用。(使用Multi search 中的count,以及批量插入)
- 搜索建议服务,思路还是先查缓存,是否匹配到缓存的记录,如果匹配则直接返回。否则去es中进行查询。
- 返回结果为空的结果,此时需要增加拼写纠错的处

本文探讨了搜索建议器的实现原理、功能需求及优化方案,特别是基于 Elasticsearch 的搜索建议器。强调了自定义搜索建议器在解决中缀匹配、拼音搜索和数据维护上的优势,同时指出其潜在的维护成本问题。
最低0.47元/天 解锁文章
2226

被折叠的 条评论
为什么被折叠?



