Как использовать гем sunspot_rails для поиска статей по теме - PullRequest
0 голосов
/ 17 августа 2011

У меня есть мини-приложение для блога, и я бы хотел, чтобы пользователи просматривали статьи, связанные с тем, что они читают, на странице показа статей.без драгоценного камня 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, чтобы облегчить этот путь.Любая помощь.Спасибо

1 Ответ

1 голос
/ 19 августа 2011

Как упоминает 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 также принимает блок с параметрами, аналогичными поисковому блоку, поэтому вы можете лучше контролировать то, как вы оцениваете сходство.

Надеюсь, это поможет!

...