怎样设计一个轻量的用户autocomplete系统
http://antirez.com/post/autocomplete-with-redis.html
怎样设计一个轻量的用户autocomplete系统
好问题 1 烂问题
未收藏 1
$user_name = strtolower ( 'Hello' );
$user_id = 1001 ;
$len = strlen ( $user_name );
for ( $pos = 0 ; $pos < $len ; $pos ++) {
$key = md5 ( $user_name [ $pos ]);
$redis -> sAdd ( 'user_name:' . $key . ':' . $pos , $user_id );
}
$keyword = strtolower ( 'he' ); // 测试的关键词我觉得还是偏重,因为我只想实现一个用户名自动联想的功能而不是搜索。这样的系统还要维护一套庞大的索引,每次更新用户名还得一个一个删掉然后再塞入新的。 无法做 LIMIT 和 OFFSET 啊,翻页怎么半,万一一个交集非常大,岂不是要把系统撑死 模糊查询的功能偏弱,只能处理以关键词开头的情况。不过这个不是重点,能把上面两点解决就很好了。 redis mysql autocomplete 0 条评论 | 修改 | 链接 时间先后 得票数
$indexes = array (); // 索引集合
$len = strlen ( $keyword );
for ( $pos = 0 ; $pos < $len ; $pos ++) {
$key = md5 ( $keyword [ $pos ]);
$indexes [] = 'user_name:' . $key . ':' . $pos ;
}
// 得出结果仅需一步, 求它们的交集
$result = $redis -> sInter ( $indexes );
1 个回答
好答案 0 烂答案
huacnlee 1 14分钟前
并没有每个字都索引的,只是在 zset 里面才有每个字,但是数据重复的会被合并掉,我那个模糊查询是以分词的结果作为索引的; 用户与某些特别关键词的关联这种功能是我下阶段的实现目标(加别名字段)查看更多关于怎样设计一个轻量的用户autocomplete系统的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did41787