acts_as_searchable を試す(2)

結論から言うととんでもなく便利だ。これはすごい。ARモデルクラスに1行書くだけで自動的にインデックスの更新をしてくれるようになる。

class SampleModel < ActiveRecord::Base
  :acts_as_searchable :searchable_fields => [:col1, :col2]
end

注意点としては、callbacksメソッドを利用している(after_create after_update after_save after_destroyの4つが使われている)ため、deleteメソッドは使えなくなる点か。まぁ、saveとdestroyを使っておけば問題はない。既にDB内にデータが存在する場合は SampleModel.reindex! とすればインデックスが作成される。但し、ソースを見る限り find(:all) の結果を each で回してインデックス作成しているので、データ量が膨大だと多分落ちるんじゃないかな。


:acts_as_searchable のオプションは以下の通り

:searchable_fields  ... 検索対象とするカラム名
:attributes         ... 属性検索条件指定(HyperEstraierの記法)
:if_changed         ... 不明


実際の全文検索は SampleModel.fulltext_search('query') という形になる。オプションは以下の通り。

 :limit       => 100                  ... 検索件数
 :offset      => 0                    ... 検索開始レコード位置
 :order       => '@score NUMD'        ... 検索の順序指定(HyperEstraierの記法)
 :attributes  => '@title STRINC 重要' ... 属性検索条件指定(HyperEstraierの記法)
 :raw_matches => false                ... trueにするとESTDOC形式のデータが返される
 :find        => {:include => :model} ... find発行時に付加するオプション
 :count       => false                ... trueにすると検索ヒット件数が返される