根据积分排名结果

时间:2014-10-01 18:01:33

标签: ruby-on-rails ruby elasticsearch nosql

我试图构建一个检索项目列表的函数,但是通过一些相当复杂的关系(例如朋友的投票和共同兴趣)对它们进行优先级排序。我可以简单地从数据库中检索一个列表,然后根据点系统进行编程排序,但速度非常慢。任何想法我怎么能做这样的事情但更快?

我已经研究过NOSQL和弹性搜索,但我并不完全清楚如何实现这一点。

这里有一些示例代码正在运行(非常缓慢):

items = Item.all
friends = current_user.friends
items.each do |item|
   friends.each do |friend|
      if friend.liked_item?(item)
         item.points += 3
      end
      if friend.viewed_item?(item)
         item.points += 2
      end
      if friend.searched_item?(item)
         item.points += 1
      end
   end
   # continue like this for categories, friends of friends, etc
end

return items.sort_by {|item| item.points}

编辑:

项目查询不是瓶颈,而是我必须检索6个其他表格并根据15个不同的标准迭代所有项目。缩小项目数量也无济于事,因为我们仍然希望显示朋友不喜欢的项目;其他表中的关联意味着排序,而不是缩小结果。

0 个答案:

没有答案