搜索提示原理浅谈

前言

搜索提示要实现哪些功能?

a: 支持前缀匹配,如输入”海底“,提示”海底捞“

b:同时支持汉字,拼音输入 @hxx 有java组件可实现

c:支持多音字,如 ”chongqing“ 和 ”zhongqing“ 都应该提示”重庆“ @hxx 注意,多音字涉及到组合全排列

d:支持拼音缩写, 如“cq”,提示“重庆” @hxx 在b的时候抽取

e: 基于用户的历史搜索行为,按照关键字热度进行排序 为了提供suggest关键字的准确度,进行排序。

 

正文

 

1:mt的实现: trie树

a-c的实现: 将汉字全部转换成拼音(有pinyin4j依赖),可依靠trie树结构实现

d的实现:需要两个trie树

@hxx 这种方案的缺陷是查询和索引都需要进行多次的拼音转换

e: 记录用户查询记录和搜索历史查询记录(map),根据 当前输入的query得到所有候选的词,进行top k

 

2: trie树

@hxx 为什么trie树是可行的?用户不会输入过长的关键字,当然我们的索引词也不会很大,响应速度为o(len),其中len为检索字符长度

例如,给出一组单词inn, int, at, age, adv, ant, 我们可以得到下面的Trie

搜索提示原理浅谈_第1张图片

 

则输入i,会提示in,inn,int 三个!

 

tr

你可能感兴趣的:(云搜索进阶之路)