前段时间 写了个 google suggestion之类 的东西。写之前在网上搜了一些实现的方法,大多数文章介绍了前台的实现,后台的实现 大多借助了数据库的查询 或者是 lucene的前缀搜索+单词搜索。但是这些后台的方法仅仅适合小数据量的搜索,不适合大数据量的搜索。因为 数据量大会造成响应时间相当慢的情况,作为搜索建议,是不可以忍受的。

经过琢磨,研究了一下GOOGLE的表现。发现 1.如果网速快的话,其响应速度很快。2. 不仅能搜出前缀匹配,而且可以搜出任意中间单词的前缀匹配。

我想到的解决方法:

1.数据结构:压缩trie树,利用它可以得到前缀匹配的keyword。可实现google suggestion的两点表现。

2.找出该前缀匹配的 排名top10的 关键词存在相应的节点上。

3.前台实现采用AJAX。注意 应该延时提交请求,可以减缓服务器的压力。

结果:200万条数据,trie树的内存占用400多M,搜索相应速度在2ms左右。