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