就我而言,我想根據趨勢過濾搜索結果(僅基於上升時間和時間)。如何按「趨勢」對搜索結果排序?
下面是實現 「趨向一種」 網站的一些例子:
http://8tracks.com/explore/all
https://news.ycombinator.com/news
兩個選項我看到:
1。實時計算分數(每頁加載)
這是我目前的解決方案。每頁加載都會調用一個MySQL查詢併爲表中的每一行計算得分。這似乎是最準確的實時方法。問題是要比較的項目越多,需要的時間越長。現在有大約1.2mil的行,需要3秒鐘。在生產場景中,我瞄準< 100-300毫秒。
2.安排運行每X分鐘和預先計算的分數
這似乎是一個很好的解決方案,但很明顯的問題,我看到的是,你在哪裏存放結果的任務嗎?更新數據庫中的每一行需要很長時間(我有大約1.2mil行)。
廣泛的谷歌搜索幫助我確定使用哪種趨勢算法,但不知道如何在生產場景中實現它。
這裏是我的數據庫的一個簡單的例子:
table_topic
id
title
table_upvotes
topic_id
user_id
created_at
這裏是實際的評分算法(http://amix.dk/blog/post/19574):
exports.hackerHot = function (gravity) {
if (gravity == null) {
gravity = 1.8;
}
return function (votes, itemDate) {
var hourAge = (Date.now() - itemDate.getTime())/(1000 * 3600);
return (votes - 1)/Math.pow(hourAge + 2, gravity);
};
};
趨勢還是僅基於upvotes?趨勢=數學,upvotes =排序... –