0

私はミニブログアプリを持っており、ユーザーが記事表示ページで読んでいるものに関連する記事を表示したいと考えています。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 ジェムを使用して、この方法を簡単にしたいと考えています。どんな助けでも。ありがとう

4

1 に答える 1

1

RocketR が言及しているように、これは Sunspot の些細な使用例です。

まず、Sunspot を使用して、3 つのフィールドがテキストとしてインデックス付けされるように指定します。

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メソッドは、検索ブロックと同様のオプションを持つブロックも受け入れるため、類似性を判断する方法をより細かく制御できます。

それが役立つことを願っています!

于 2011-08-19T08:04:51.110 に答える