0

我目前正在爲我的Rails應用程序實現趨勢主題。實現趨勢主題

我現在有這就是:

每個崗位有描述其主題2到3個字topic屬性。

然後我得到他們的查看次數頂帖(我也喜歡可&的最愛,但對於時間使用簡單的觀點是):

def trending_topics 
    Post.order("COALESCE(impressions_count, 0) DESC").limit(200) 
end 

然後我要做的就是簡單地只選擇獨特的主題和展示其中一些:

<% trending_topics.select(:topic).map(&:topic).uniq.take(10).each do |topic| %> 
     <li><%= topic %></li> 
    <% end %> 

我的問題是:

  1. 有沒有辦法讓最頻繁出現的:topic,排名他們, 並挑選那些作物的奶油?
  2. 這是一種可持續的方式來跟蹤熱門話題?如果沒有, 有沒有辦法讓它更有效率?
  3. 有沒有更好的方法來實現一個功能,在搜索 最熱門和頻繁:topic屬性的職位?

回答

0

回答您的問題:

(1)是的,你可以得到每個:topic的,像這樣的頻率哈希:

array = trending_topics.select(:topic).map(&:topic) 
freq = array.inject(Hash.new(0)) { |h,v| h[v] += 1; h } 
# => {'topic1'=>3, 'topic2'=>3, 'topic3'=>1, ...} 

(2)這是「可持續」,因爲它不會隨着你引入的帖子/主題的數量增加而增加(因爲你仍然是從前200個帖子中選取的,儘管獲得「前200名」會稍微增加一些計算機隨着帖子數量的增加)。

(3)我認爲impressions_count不會跟蹤什麼是趨勢的一個很好的方式,因爲對我來說impressions_count有印象的總數,而你希望它的一些時間方面(例如, impressions_this_week)。

因此,一種方法是引入一個定期更新的impressions_this_week列。然後你可以根據這個選擇。

另一種方法是編寫一個方法,該方法使用整體impressions_count以及created_atupdated_at時間戳來計算帖子的「熱度」。你可以用一個簡單的衰減函數做這個,然後調整該函數的常量,直到你得到你想要的衰變。有一些類似於這裏顯示的概念:http://blog.notdot.net/2009/12/Most-popular-metrics-in-App-Engine。一旦你寫了這個方法,你可以根據它的輸出進行排序。

0

如果您需要比您當前的排名算法更復雜一些,您應該看看how sites like reddithackernews來處理此問題。這是相當複雜的,但你應該能夠在Ruby中找到每個算法的實現。