我试图构建一个检索项目列表的函数,但是通过一些相当复杂的关系(例如朋友的投票和共同兴趣)对它们进行优先级排序。我可以简单地从数据库中检索一个列表,然后根据点系统进行编程排序,但速度非常慢。任何想法我怎么能做这样的事情但更快?
我已经研究过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个不同的标准迭代所有项目。缩小项目数量也无济于事,因为我们仍然希望显示朋友不喜欢的项目;其他表中的关联意味着排序,而不是缩小结果。