007
2020 年4 月 17 日 13:51
1
我正在将拥有约 130 万条帖子和二十年历史的旧论坛迁移到 Discourse。
我希望避免的是,在迁移成功后,所有用户从一开始就显示“已读时长”为 0,因为许多用户拥有 5 年、10 年甚至 15 年以上的历史。
鉴于 Discourse 非常重视已读时长(我个人认为这很棒),如果能对拥有大量历史数据的用户进行最大努力的估算,让他们在迁移后不会觉得自己的贡献时长被清零,那就太好了。(虽然游戏化机制可以成为巨大的灵感和动力来源,但当用户引以为傲的数据被清零时,它也可能让人感到沮丧。)
我意识到对于之前从未追踪过的数据,没有任何完美的显示方式,但是否有脚本可以运行,或者是否可以在导入脚本中添加某些内容,从而根据用户当前的发帖数来估算其历史已读时长?
例如:
PostCount = SELECT posts_count FROM posts WHERE id = (当前正在导入的用户 ID)
ReadTimePerPost = 300(秒)
RetroactiveReadTime = PostCount * ReadTimePerPost
从理论上讲,这样做是否可行,然后将该数值插入数据库并关联到每个用户?
如果可行,已读时长存储在哪里,又是如何存储的?
顺便提一下,将每篇帖子的价值估算为 300 秒的已读时长只是我的一个估计。说实话,考虑到所有因素,这个数值可能偏低,但比显示为 0 要准确得多。
pfaffman
(Jay Pfaffman)
2020 年4 月 17 日 22:03
2
我想我会这样做:
Post.where(user_id: user.id).where(some other stuff?).each do |post|
PostTiming.create(topic_id: post.topic_id, post_number: post.post_number, user_id: user.id, msecs: READ_TIME_MSECS
end
如果我的计算没错,300 秒就是 5 分钟。你觉得阅读并回复 这篇帖子花了 5 分钟吗?
007
2020 年4 月 17 日 22:46
3
我还没来得及仔细考虑时间安排的问题。我原本的想法是,“阅读时长”在技术上并不仅仅统计那些最终导致发帖的阅读行为。很多人会花大量时间浏览和略读,而仅凭阅读和发帖所花费的时间,这些行为是完全没有被计算在内的。
当然,我宁愿低估,也不愿高估。
pfaffman
(Jay Pfaffman)
2020 年4 月 18 日 00:41
4
我已经做过无数次导入了。从来没有人要求编造虚假的阅读时间。我敢打赌,大家都会知道统计数据是从你切换到 Discourse 之后才开始计算的。
riking
(Kane York)
2020 年4 月 18 日 06:52
5
您更值得花时间的做法,可能是确定在授予导入用户 TL2 权限时应采用的自动阈值,并亲自挑选社区中您信任具备“对标题和分类的良好判断力”的人,让他们一开始就担任 TL3。
提升 TL 等级是阅读时长统计在导入场景中唯一可能具有实际意义的主要用途。