如何用Redis实现实时自动补全功能?

“自动补全”功能应用的地方很多,如Suggest提示, 输入法提示等。实现方式也有,用Sphinx, Solr都可以。如果用Redis作为存储,该如何设计构建一套实时自动补全功能?

评论 (0)链接2011-11-22 

在网上看到一篇文章,是专门讲解Redis实时搜索的:利用Redis构建高效的实时搜索
Redis作者早期的文章(英文的):Auto Complete with Redis

希望有帮助。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2011-11-22

Suggest算法是根据输入的头几个字符,自动列出匹配的字符串。
我给出个简单的算法:
1.对用户的输入进行分词,或者不分词,或者从Sougou、百度输入法词库中导入。并设置每个词、分句的权重。
2.使用第一个Redis hashtable做第一个输入字符的匹配,key是字符,value是整个词、分句。再使用第二个Redis hashtable保存头两个字符的匹配,若匹配的词句很多,需要按照上面的权重定期清理不常用的词句。需要使用几个Redis匹配字符,要具体测试。
3.相同头字符(key)对应的不同词分句(value)使用Redis提供的链表连接起来。
4.匹配时,用户输入第一个字符时用第一个Redis hashtable匹配,输入第二个字符时用第二个Redis hashtable匹配...

黄文彬
编辑于 2011-11-22
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (2)链接 • 2011-11-22
  • 1 支持
    匹配如果不是从一句话的头开始,而是可以随意位置开始呢。用redis去作未必是好事情。 – Geo5 2011-11-22
  • 0 支持
    对,这个只能满足从头开始匹配的。“随意位置”还是全文好一些。 – 黄文彬 2011-11-22

如果你使用python,这儿有一个基于redis自动补全的代码(MIT License,所以你可以拿来随便用): 这儿是github上源代码地址:autocomplete-redis

一般都是利用redis的key-value映射,key是你要搜索的关键词,value的是一个可以排序的list set。redis对这些都有很好的支持。key你需要用中文的分词算法进行分词(得到key),然后建立从分词 key 到所有包含这个key的搜索条目的set的映射。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-10-04
德问是一个专业的编程问答社区,请 登录注册 后再提交答案