thinking sphinxを使ってみた

rails全文検索プラグイン


Railscasts - Thinking Sphinxで紹介されてて
Rails Search in The Ruby Toolboxでも人気なようなので
使ってみた。

Install

sphinx

macportsからbrewに乗り換えたので(portもあるようです)
brew install sphinx

thinking sphinx

gemもあるようですがpluginで入れてしまいました。
script/plugin install git://github.com/freelancing-god/thinking-sphinx.git

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


補足

検索件数は下記で制御。
will_paginate入れるのが吉ですね。

#lib/thinking_sphinx/search.rb
    def per_page
      @options[:limit] ||= @options[:per_page]
      @options[:limit] ||= 20
      @options[:limit].to_i
    end