如何使用sunspot_rails gem搜索相关文章

时间:2011-08-16 22:57:15

标签: ruby-on-rails ruby-on-rails-3 sunspot sunspot-rails

我有一个迷你博客应用程序,我希望用户在文章显示页面中查看与他们正在阅读的内容相关的文章。没有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来轻松实现这一目标。任何帮助。谢谢

1 个答案:

答案 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方法也接受一个与搜索块具有相似选项的块,因此您可以更好地控制判断相似性的方式。

希望有所帮助!