Railscasts - Thinking Sphinxで紹介されてて
Rails Search in The Ruby Toolboxでも人気なようなので
使ってみた。
Install
indexing
sphinxには、fieldとattributeという概念があって
fieldには検索項目を指定し、attributeには検索結果のsortやgrouping項目を指定します。
thinking sphinxでは、モデルにdefine_indexを記述し
indexesメソッドでfieldをhasメソッドでattributeを指定します。
まぁ、みれば分かります。
define_index do indexes subject, :sortable => true indexes content indexes author(:name), :as => :author, :sortable => true has author_id, created_at, updated_at end
rake
indexを作成して、検索可能にする。
index作成
rake thinking_sphinx:index rake ts:index rake ts:in
index開始/停止
rake thinking_sphinx:start rake ts:start rake thinking_sphinx:stop rake ts:stop
index再作成
indexingの設定を変えた場合(であってるかわからん)
rake thinking_sphinx:reindex
dbの構成が変わった場合(sphinxの再起動込みでやってくれる)
rake thinking_sphinx:rebuild rake ts:rebuild
検索
searchメソッドを使用
Article.search 'pancakes', :conditions => {:subject => 'tasty'}, :sort_mode => :extended, :order => "created_at DESC, @relevance DESC"
will_paginate
Article.search 'pancakes', :page => params[:page], :per_page => 42
感想
導入もお手軽で、ドキュメントも充実してます。
日本語前提でなけりゃ、いいんじゃないでしょうか。
(1gramであれば、日本語も対応できるそうです。)
ただ、日本語での実績面では
hyperestraier or toritonn なんでしょうか。
Railsの全文検索は、Hyper Estraierとsearch_doプラグインで超簡単 - このブログは証明できない。
“最適な”全文検索システムの選択 − @IT
参考
Home § Thinking Sphinx
Railsで全文検索 - Thinking Sphinx - 78:22
MySQL FULLTEXT + Ngram : LIKE検索より数十倍高速な、お手軽 日本語全文検索 について|blog|たたみラボ
MySQLで全文検索 - FULLTEXTインデックスの基礎知識|blog|たたみラボ
Use a Cron Job to Automate Sphinx Index Refresh from Rails Rake Task
補足
検索件数は下記で制御。
will_paginate入れるのが吉ですね。
#lib/thinking_sphinx/search.rb def per_page @options[:limit] ||= @options[:per_page] @options[:limit] ||= 20 @options[:limit].to_i end