微博春晚流排序算法榜单
需求说明
原始需求说明
首页
实时流
白名单用户所发博文 + 关键词
阅读量+互动量排序,权重各占50%
发博时间降权
精彩段子
段子实时流
白名单用户所发博文 + 关键词
阅读量 + 互动量排序, 权重各占50%
发博时间降权
段子排行榜
白名单用户所发博文 + 关键词
阅读量 + 互动量排序, 权重各占50%
uid 去重,每个uid显示排名最高的博文
视频流
历年节目回顾
白名单用户所发博文+关键词
播放量+互动量排序,权重各占50%
明星实时流
白名单用户所发博文 + 关键词
阅读量 + 互动量排序,权重各占50%
发博时间降权
排序规则的抽象
是否区分视频微博
博文类:排序计数按 阅读量 + 转评赞
视频类:排序计数按 播放量 + 转评赞
视频的播放量从微博信息中获取,不同于 阅读、转评赞是同一个接口
是否时间降权
实时流: 计数按发布时间因子衰减
是否uid去重
段子手排行榜
抽象后的流排序
流分类
春晚实时博文 (阅读+转评赞+时间降权; 春晚主场、精彩段子、明星拜年)
春晚段子排行 (阅读+转评赞+uid去重,精彩段子)
春晚视频排行 (播放量+转评赞,历年回顾、视频排行)
算法抽象
//根据后台设置的计数权重计算 单体微博的原始得分
//如对于视频微博, $weight['read'] = 0
//对于普通博文, $weight['play'] = 0
$raw_score = $weight['read'] * $read_count + $weight['interacts'] * $interacts_ccount + $weight['play'] * $play_counts;
//根据时间衰减因子,计算衰减系数,
//$decay_hour_config 衰减到e^(-1) 约为0.3678需要的小时数
//如果需要实时性比较强,$decay_hour_config 可以设置的比较下,如0.01
$decay_weight = exp(-1 * ($count_time_in_seconds - $mid_create_time_in_seconds) /(3600 * $decay_hour_config));
$score = $score * $decay_weight;
流收录&&排序总体流程
使用redis的zset 实时收录feed流
区分视频微博和普通微博(redis_key_feed, redis_key_video, redis_key_spring2018)
每十分钟排序
前台展示使用redis_key_spring2018, 初始微博的score 为0