9

以前に検索機能を実装したことがなく、少し行き詰まりを感じています。キーワードに基づいて結果を検索する Sunspot 検索機能があります。これはうまく機能しますが、複数選択ファセット機能を実装したいと考えていますが、基本的なファセット検索の設定方法がわかりません。

私は多対多の関係を持っています(実際にはレールではありません):

クラス People has_many :skills, :through => experience (およびその逆など)

Class People < ActiveRecord::Base
  has_many :skills, :through => experience

  searchable do
    text :first_name, :surname
  end
end

コントローラーで

@search = Sunspot.search(People)
   facet :skill_ids
end

これは、私がうまくいかない基本的な例です。次のエラーが生成されます。

Sunspot::UnrecognizedFieldError: No field configured for People with name 'skill_ids'

:skill_ids へのリンクを作成する方法

モデル内の参照が欠落しているに違いないと思いますが、関係の Id を参照する例は見つかりません。私が見つけたほとんどの例では、ファセット機能を使用するときに、そのモデルに既に存在する列を使用しています。

  • 基本的な実装を機能させるにはどうすればよいですか?
  • ビューでこれをどのように使用しますか? hits.facet を呼び出して、スキルを反復処理する必要がありますか? これを表示するコードはどのようになりますか?
  • 複数のファセットを選択して検索するにはどうすればよいですか?
  • これをコミュニティ wiki に入れる必要がありますか?

お時間をいただきありがとうございます!

4

1 に答える 1

14

フィルタリング、ファセット、または注文したいものはすべて、Sunspotが知っておく必要があります。したがって、モデルでは:

searchable do
  text :first_name, :surname
  integer :skill_ids, :multiple => true, :references => Skill
end

コントローラでの#search呼び出しは正しく見えます。あなたの見解では、あなたはこれらの線に沿って何かをするでしょう:

- @search.facet(:skill_ids).rows.each do |row|
  = row.instance.name

row.instance行の値が参照するスキルのインスタンスを返します(これは、:referencesオプションがsearchable定義で実行していることです)。

「検索する複数のファセットを選択する」とはどういう意味かわかりません。検索でメソッドを複数回呼び出すことで、複数のファセットを生成できます(ユーザーはさらに検索を絞り込むことができます)facet次に、メソッドを使用してスコープ制限付きのファセット選択を使用できます。このwithメソッドは、何度でも呼び出すことができます。

ウィキと言えば、この情報のほとんどは(詳細な説明とともに)Sunspotウィキで入手できます。

于 2010-03-26T12:26:07.757 に答える