联创圈 logo 联创圈
热门搜索
返回联创圈官方笔记

联创圈开发日记(二):创作社区排序算法的设计思路

封面图

上一篇聊了技术选型,这篇聊聊创作社区排序算法的设计。

排序算法是内容社区的核心,决定了什么内容被更多人看到,直接影响创作者的积极性和用户体验。

设计目标

1. 多维度综合评估:不能只看浏览量,要综合浏览、点赞、评论、打赏等多个指标

2. 鼓励优质内容:打赏和付费购买代表高价值认可,权重应该更高

3. 保持新鲜度:新内容要有机会曝光,不能让老帖子永远霸占排名

4. 可配置:管理员可以在后台调整权重,不需要改代码

核心算法:对数加权 + 时间衰减

评分公式:

score = w_views × ln(views + 1)
      + w_likes × ln(likes + 1)
      + w_replies × ln(replies + 1)
      + w_tips × ln(tips_count + 1)
      + w_tip_amt × ln(tips_amount + 1)
      + w_paid × ln(paid_count + 1)

final_score = score × (0.3 + 0.7 × 0.5^(days / half_life))

为什么用对数函数?

如果直接用原始数值,一篇浏览量10000的帖子会碾压所有浏览量1000以下的帖子,新人内容完全没有曝光机会。

用 ln(x+1) 对数函数后:

- 浏览量100 → ln(101) ≈ 4.6

- 浏览量1000 → ln(1001) ≈ 6.9

- 浏览量10000 → ln(10001) ≈ 9.2

差距被大幅压缩,但仍有区分度。这样优质新内容也有机会上浮。

为什么用半衰期衰减?

半衰期模型 0.5^(days/half_life) 的好处是衰减速度自然平滑:

- 半衰期7天的情况下,7天前的内容保留50%分数,14天前保留25%

- 最低保留30%分数,避免优质老帖被完全淹没

管理员可以配置半衰期天数,3天(新鲜度优先)到14天(质量优先)之间。

权重设计

默认权重设置:

- 浏览量 ×1.0:基础热度指标,但权重最低

- 点赞 ×3.0:主动认可,比浏览有分量

- 回复 ×2.0:互动深度,但灌水成本低

- 打赏次数 ×5.0:真金白银的认可,权重最高

- 付费购买 ×4.0:高价值转化行为

- 打赏金额 ×0.1/元:金额的边际递减

后台预设方案

管理员不需要手动调每个参数,我们内置了4种预设:

1. 均衡模式:各项指标权重适中,适合大多数场景

2. 质量优先:提高打赏/付费权重,降低浏览量权重,适合知识付费社区

3. 新鲜度优先:缩短半衰期,让新内容获得更多曝光,适合资讯类社区

4. 变现优先:大幅提高付费/打赏权重,适合以变现为核心的平台

技术实现

权重配置存储在SiteConfig表中,通过 get_ranking_config() 函数读取。管理员在后台修改后实时生效,不需要重启服务。

排序在Python层完成(目前数据量不大),后续如果数据量上来,可以考虑用Redis缓存计算结果。

这就是联创圈排序算法的全部设计思路。不是最复杂的算法,但够用、可调、好维护。

后续会继续分享联创圈的开发过程。有问题评论区交流。

1458
评论
加载评论中...

键盘快捷键

导航

/ 聚焦搜索框
g h 返回首页
g r 资源库
g c 课程中心

操作

t 切换深色模式
b 返回顶部
f 快捷操作面板
? 显示快捷键帮助

图片浏览

上一张
下一张
Esc 关闭/退出

?Shift + / 随时打开此面板