我有一个迷你博客应用程序,我希望用户在文章显示页面中查看与他们正在阅读的内容相关的文章。没有sunspot_rails宝石,我会做这样的事情
在我的模特中
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来轻松实现这一目标。任何帮助。谢谢
答案 0 :(得分:1)
正如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的“更像这个”功能,并返回类似于上述全文搜索的搜索对象。您可以使用其results
方法呈现该搜索的结果。
<%= render @article.more_like_this.results %>
more_like_this方法也接受一个与搜索块具有相似选项的块,因此您可以更好地控制判断相似性的方式。
希望有所帮助!