V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
unii23i
V2EX  ›  分享创造

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

  •  
  •   unii23i · 2022-07-13 18:59:48 +08:00 · 795 次点击
    这是一个创建于 713 天前的主题,其中的信息可能已经有所发展或是发生改变。
    原则①:不让大量新回复的帖子和最新发布的帖子出现,也就是不使用 直接按照最新回复时间倒序
    原则②:新发布的帖子( 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 小时前回复的队列,结果就是每次刷新会看到一堆旧热内容+新热内容
    1 条回复    2022-07-13 19:14:57 +08:00
    eason1874
        1
    eason1874  
       2022-07-13 19:14:57 +08:00   ❤️ 1
    去重不用整这些花里胡哨的,在 local 记录下当前浏览列表的所有帖子 ID ,从服务器拉取到最新 ID 列表后,排除掉跟前面重复的就行

    本地去重,以推荐出名的短视频都是这样做的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5510 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 06:30 · PVG 14:30 · LAX 23:30 · JFK 02:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.