フィッシュ・アイは面白い。 |
Sunspot_solr で全文検索機能を実装する話は前に書いたが、単一のテーブルだけではなく関連するテーブルの中まで検索することも容易に出来る。
例えば、Question には 複数の Reply があったとする。以下のようなModelだ。
class Question < ActiveRecord::Base
attr_accessible :question
has_many :replies
end
class Reply < ActiveRecord::Base
attr_accessible :question_id, :reply
belongs_to :question
end
このとき、次のように検索設定をする。
class Question < ActiveRecord::Base
attr_accessible :question
has_many :replies
searchable do
text :question
text :reply do
replies.map(&:reply)
end
end
end
Questionテーブルの"question"カラムだけでなく、
Replyテーブルの"reply"カラムでも全文検索が出来るようになる。
"text :reply do" の :reply は、実際のカラム名である必要は無い。
"replies.map(&:reply)" の方には、実際のカラム名を指定する。
設定が終わったらreindexしておく。
もし、検索実行時に"reply"カラムを検索対象から外したければ、
search = Question.search do
keywords params[:query],
:fields => [:question]
end
@questions = search.results
のように、:fields パラメータを指定すれば良い。
:fields を指定しないか、
:fields => [:question, :reply]
のように両方を指定すれば、両方を対象に検索が実行される。