庆宇笔记 - 2018年5月
http://qingyu.me/2018/05/
A Rose by Any Other Name.
-
微博春晚流排序算法榜单
http://qingyu.me/archives/ranklist.html
2018-05-18T11:23:00+08:00
需求说明原始需求说明首页实时流白名单用户所发博文 + 关键词阅读量+互动量排序,权重各占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