如何使用sunspot_rails gem搜索相关文章
我有一个迷你博客应用程序,我希望用户在文章显示页面中查看与他们正在阅读的内容相关的文章。 没有sunspot_railsgem,我会做这样的事情
在我的模型中
def self.related_search(query, join = "AND") find(:all, :conditions => related_search_conditions(query, join)) end def self.related_search_conditions(query, join) query.split(/\s+/).map do |word| '(' + %w[name description notes].map { |col| "#{col} LIKE #{sanitize('%' + word.to_s + '%')}" }.join(' OR ') + ')' end.join(" #{join} ") end
然后在我看来会是这样的
@article.related_search
但我想使用sunspot_rails gem让这种方式变得容易。 任何帮助。 谢谢
正如RocketR所提到的,这对于太阳黑子来说是一个微不足道的用例。
首先,使用Sunspot指定您有三个要作为文本索引的字段。
class Article < ActiveRecord::Base searchable do text :name text :description text :notes end end
然后发出搜索,可能来自控制器操作。 下面的@search
对象包含有关搜索响应的元数据,包括其results
方法下的匹配对象。
@search = Article.search do keywords query end @results = @search.results
要查找与已加载的对象类似的其他文档,例如在show
动作中,您可以调用more_like_this
实例方法。 这是一种特殊的搜索,它使用Solr的“更像这个”function,并返回类似于上述全文搜索的搜索对象。 您可以使用其results
方法来呈现该搜索的结果。
<%= render @article.more_like_this.results %>
more_like_this方法还接受具有与搜索块类似选项的块,因此您可以更好地控制判断相似性的方式。
希望有所帮助!