将所有用户的帖子从最高到最低排名

时间:2016-09-07 18:51:35

标签: getstream-io

如果用户的帖子包含评论和喜欢以及创建的日期,我该如何实现某种排名,其中涉及评论和喜欢的数量以及创建和返回帖子的日期从最高位置到最低位置。

1 个答案:

答案 0 :(得分:2)

您要找的是Ranked Feeds。排名的供稿允许自定义活动排名;您可以使用自己的公式计算每项活动的得分。只要您的活动包含所需信息(例如likes_countcomments_count),您就可以使用此信息对Feed进行排名。

以下是排名公式的简单示例:

{
    "score": "likes_count + comments_count",
     "defaults": {
        "likes_count": 0,
        "comments_count": 0
    }
}

一种非常常见的方法是将一些受欢迎度得分与活动年龄相结合。为此,您可以使用其中一个time decay函数,并将结果与​​喜欢和评论的总和相乘。

例如:

{
  "functions":{
    "popularity_gauss":{
      "base":"decay_gauss",
      "scale":"5d",
      "offset":"1d",
      "decay":"0.3"
    }
  },
  "defaults": {
      "likes_count": 0,
      "comments_count": 0
  },
  "score":"popularity_gauss(time) * (likes_count + comments_count)"
}

该示例使用带有缩放,偏移和衰减参数的decay_gauss函数。使用所选参数,活动将在他们越过1天的阈值时降低他们的分数。对于5天的活动,分数将降至三分之一。

同步数据

我们在示例likes_countcomments_count中使用的两个计数器随着时间的推移正在发生变化。要使Ranked Feeds工作,您需要同步这些值。活动数据可以更新using the APIs

注意:由于活动更新API不支持部分更新,因此建议不要以事务方式更新活动(例如,用户点击类似 - >发送API调用以将更新计数器从X更新为X + 1),但要执行每隔X秒更新一次。

每5分钟一次Crontab示例:

*/5   *  *   *   *     /path/to/script/update_activities_counters