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

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

Другие вопросы по тегам