我需要使用Mongoid对Rails应用程序中的帖子进行排名,我正在寻找有关如何高效准确地进行操作的输入。
现在,我制作它的方式非常低效。
现在我正在根据这样的方法对模型进行排序:
def hotness
return (self.confidence*(self.popularity+0.3))/Math.sqrt((Time.now - Time.at(self.created_at)))
end
然后我根据热度对数组进行排序并将其打印到页面。这是一种错误的方法,现在就没有发生这种情况。
我不确定如何更好地解决这个问题。
还有其他功能不需要时间调用,我可以想象不同的方法来做这些,但仍然喜欢输入。优化对我很重要。
提前多多感谢。如果需要,我可以澄清任何事情。
答案 0 :(得分:0)
从上面的评论开始 - 如果这是可以在字段中缓存的结果,定期更新,或者保存模型 - 那么这是最好的方法(在查询性能方面) MongoDB的)。
所以你最终会得到这样的东西:
class Post
include Mongoid::Document
field :hotness, :type => Float, :default => 0
field :confidence, :type => Float, :default => 0
field :popularity, :type => Float, :default => 0
before_save :refresh_hotness
scope :hottest, desc(:hotness)
protected
def refresh_hotness
self.hotness = (self.confidence*(self.popularity+0.3))/Math.sqrt((Time.now - Time.at(self.created_at)))
end
end
然后,您可以使用Post.hottest
抓取订购的“最热门”帖子。