最近使用开心网,一些功能很有意思,比如发短消息的时候,你输入拼音,就可以提示出汉字,感觉真的很好玩,给用户的体验也很棒,效果如下图:
        如何实现拼音搜索_第1张图片
 
 
          自己琢磨了一下,终于有点头绪了,写出来和大家分享下:
 
 
           首先,这个东西不是输入法,所以拼音肯定建立在既有用户的基础上的,这就要求在用户注册的时候,将用户的姓名从汉字转化成拼音,这个比较简单,因为每个汉字都对应一个或几个拼音码,所以转换起来比较容易,以下js就是实现方法:      
 
 
感兴趣的朋友可以写成java般的,这样我们就得到用户名的拼音了,比如:“户起龙”,转换成拼音就是“huqilong”,此时你完全可以让用户输入“huqilong”来检索用户,可是有的用户想直接输入"hql"怎么办呢?细心的拼音会发现,"hql"其实是用户名的声母组合,拼音的声母是很少的,完全可以放到数组里,然后用正则匹配出来。
         为了给用户好的体验我们保存两份,一份是姓名的全拼“huqilong”;另外一份是声母的简写"hql",我们可以分别存在两个字段里,这样就可以通过检查这两个字段进行匹配了。
 
          但是这样匹配很产生效率瓶颈,因为大的网站可能有上百万人,检索起来很费劲的,你的ajax提示框可能一直再加载中状态,这样可不好,怎么办?
           我想到的方法是:lucene   利用对所有的用户拼音建立索引文件,然后去查找此索引即可。这样效率会很高。
           思路是这样子的,高人如有建议请留言
 
 
 
注:最近正再搞社区有关的东东,有兴趣的朋友可以讨论下,谢过!