ユーザーができるアプリケーションがあります:
- 製品についてのレビューを書く
- 製品にコメントを追加する
- 賛成/反対投票レビュー
- 上/下投票コメント
すべての賛成/反対投票はdbテーブルに記録されます。
私が今やりたいのは、過去4週間で最もアクティブなユーザーのランキングを作成することです。もちろん、良いレビューは良いコメントよりも重要視されるべきです。しかし、たとえば、10の良いコメントは、1つの良いレビューよりも重み付けする必要があります。
例:
// reviews created in recent 4 weeks
//format: [ upVoteCount, downVoteCount ]
var reviews = [ [120,23], [32,12], [12,0], [23,45] ];
// comments created in recent 4 weeks
// format: [ upVoteCount, downVoteCount ]
var comments = [ [1,2], [322,1], [0,0], [0,45] ];
// create weight vector
// format: [ reviewWeight, commentsWeight ]
var weight = [0.60, 0.40];
// signature: activties..., activityWeight
var userActivityScore = score(reviews, comments, weight);
... update user table ...
List<Users> users = "from users u order by u.userActivityScore desc";
公正なスコアリング関数はどのようになりますか?score()
関数の実装はどのように見えるでしょうか?g
レビューがより重く重み付けされるように関数に重みを追加するにはどうすればよいですか?たとえば、写真への投票が追加された場合、そのような関数はどのようになりますか?