帖子按照回复时间和互动数据 计算分值后,想要插入新的内容,怎么解决去重问题呢?

2022-07-13 18:59:48 +08:00
 unii23i
原则①:不让大量新回复的帖子和最新发布的帖子出现,也就是不使用 直接按照最新回复时间倒序
原则②:新发布的帖子( 0 回复)需要获得展示空间,当然会假设把 0 回复记为 1 回复,逐次+1
原则③:手指持续下拉的列表中不能出现重复帖子
原则④:新帖子在获得了高互动的情况下需要及时顶上来,也就是跑批要及时,跑批需要时间


探索的方案如下:
热门计算规则是常见的那 3 大算法,回复数、点赞数、最新回复时间等计算分值后综合排序
方案 0:在热门队列里面,延时插入新回复的内容,比如 5 个热门+2 个新内容,但是量大的情况下违背了原则④


方案 1:6 小时前回复的内容进行计算跑批,分值从高到底形成[6 小时前热门队列],6 小时内按照回复数从高到底的队列为[6 小时内新队列],首次刷新包括每次刷新,都会取[6 小时内新队列]的前 5 ,插入[6 小时前热门队列],
但是在[6 小时前热门队列]中的内容被用户回复后又跑进[6 小时内新队列]
导致刷新的第一页与第二页的内容重复,违背了原则③


方案 2:试着反过来思考[6 小时内新队列]取 5 个,插入[6 小时前热门队列]取 10 个,而热门队列只跑最新 1000 个(解决跑批时间的问题),是不是能解决去重问题呢?但是随着数据量扩大,比如 6 小时内有 100 个新内容,每次只取 5 个,需要刷新 20 次才能看到最最新的内容,违背了原则②
当然也可以在这 100 进行随机抽选,这就涉及到千人千面,目前开发范围没有那么大

方案 3:为方案 1 的迭代,或者对[6 小时内新队列]再做一次跑批,允许 6 小时内的增量为 1~1000 ,约 1 分钟内能跑完,跑完的结果有最新也有高互动的,然后再叠 6 小时前回复的队列,结果就是每次刷新会看到一堆旧热内容+新热内容
796 次点击
所在节点    分享创造
1 条回复
eason1874
2022-07-13 19:14:57 +08:00
去重不用整这些花里胡哨的,在 local 记录下当前浏览列表的所有帖子 ID ,从服务器拉取到最新 ID 列表后,排除掉跟前面重复的就行

本地去重,以推荐出名的短视频都是这样做的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/865968

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX