0

我正在开发一个基于 Google App Engine (python) 的网站,该网站允许用户生成内容,并对该内容进行投票(喜欢/不喜欢)。

我们的设计师相当模糊地指定首页应该是最近内容和流行内容之间的平衡,可能假设这些只是创建一个得分值,该得分值对喜欢/不喜欢与创建以来的时间进行加权。最终,目标是 (1) 快速过滤掉不良内容,(2) 继续流行的内容保持更长时间,以及 (3) 新内容有机会保持足够长的时间以获得足够的票数来确定它是否是好是坏。

我可以根据喜欢/不喜欢轻松计算分数。但是结合时间因素来产生一个可以索引的单一分数似乎并不可行。我基本上需要每天重新索引所有内容以调整其分数,一旦我们拥有大量内容,这似乎成本过高。所以,我对潜在的解决方案不知所措。

我还建议了一些时间框(所有时间,每天,每周),但他说用户不太可能查看默认视图以外的选项卡。另外,如果我根据上周进行过滤,我需要按时排序,然后二次流行度排序基本上没有意义,因为提交时间几乎是唯一的。

关于我可能忽略的解决方案的任何建议?

像 Google 的 Prediction API 或 BigQuery 这样的东西能更好地处理这个问题吗?

4

1 回答 1

2

这样的系统通常被称为“频率”,有很多方法可以做到这一点。一种方法是让选票随时间“衰减”;我过去在 App Engine 上通过存储当前分数和最后更新来实现这一点;任何投票都会根据上次更新时间对分数进行指数衰减,然后再存储两者,并且后台进程每天运行几次以更新一段时间内未收到投票的任何帖子的分数和衰减时间. 因此,一个帖子的分数总是趋向于 0,除非它一直得到支持。

另一个更简单的系统是对帖子进行序列号。每当有人对帖子进行投票时,请增加其数量。因此,自然排序是按创建顺序排列的,但投票有助于“重新洗牌”事物,将更多投票的帖子放在更新但投票较少的帖子之前。

于 2015-07-17T14:28:40.877 回答