【问题标题】:How to use sunspot_rails gem to search for related articles如何使用 sunspot_rails gem 搜索相关文章
【发布时间】:2011-08-16 22:57:15
【问题描述】:

我有一个迷你博客应用程序,我希望用户在文章显示页面中查看与他们正在阅读的内容相关的文章。如果没有 sunspot_rails gem,我会做这样的事情

在我的模型中

  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 来简化这种方式。任何帮助。谢谢

【问题讨论】:

  • 您阅读过sunspot_rails gem 文档吗?这几乎是一项微不足道的任务。
  • thinkshipnx 让这一切变得如此简单

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


【解决方案1】:

正如 RocketR 所提到的,这是 Sunspot 的一个微不足道的用例。

首先,使用 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 的“More Like This”功能,它返回的搜索对象类似于上面的全文搜索。您可以使用其results 方法来呈现该搜索的结果。

<%= render @article.more_like_this.results %>

more_like_this 方法还接受与搜索块具有相似选项的块,因此您可以更好地控制判断相似性的方式。

希望有帮助!

【讨论】:

  • 我会尝试一下,但在此之前,由于我有 @article = Article.find(:id) 并显示与此匹配的相关文章,这会为我的表演动作带来结果
  • 我明白了,当然。更新以在 Sunspot 中添加 more_like_this 的基本示例。
  • 很有意思,是不是说more_like_this是黑子的帮手?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 2014-08-10
  • 2017-09-10
  • 1970-01-01
相关资源
最近更新 更多