運用のための Sunspot 設定
Ruby on Rails で Solr による検索を行う Sunspot に関して、私が運用上設定している内容を公開します。
config/sunspot.yml の設定
Sunspot (v1.3.3 現在) では、ジョブやタスクでインデックスを追加・更新した場合、自動でコミットが行われません。
そのため、auto_commit_after_request は false に設定し、代わりに Solr 側の設定 (後述) で自動 commit を行います。
また、Capistrano と連携できるよう、solr_home, data_path, pid_dir を適切に設定します。
production: auto_commit_after_request: false solr: solr_home: <%= File.expand_path('../../current/solr', Rails.root) %> data_path: <%= File.expand_path('../../current/solr/data', Rails.root) %> pid_dir: <%= File.expand_path('../../current/solr/pids', Rails.root) %> ... ...
solr/conf/solrconfig.xml の設定
autoCommit のコメントアウト部分を解除します。
<!-- Perform a <commit/> automatically under certain conditions: maxDocs - number of updates since last commit is greater than this maxTime - oldest uncommited update (in ms) is this long ago Instead of enabling autoCommit, consider using "commitWithin" when adding documents. http://wiki.apache.org/solr/UpdateXmlMessages <autoCommit> <maxDocs>10000</maxDocs> <maxTime>1000</maxTime> </autoCommit> -->
を
<!-- Perform a <commit/> automatically under certain conditions: maxDocs - number of updates since last commit is greater than this maxTime - oldest uncommited update (in ms) is this long ago Instead of enabling autoCommit, consider using "commitWithin" when adding documents. http://wiki.apache.org/solr/UpdateXmlMessages --> <autoCommit> <maxDocs>10000</maxDocs> <maxTime>1000</maxTime> </autoCommit>
に変更します。
config/deploy.rb (Capistrano) の設定
after "deploy:setup" do ... run "mkdir #{ shared_path }/solr" run "mkdir #{ shared_path }/solr/data" run "mkdir #{ shared_path }/solr/pids" end after "deploy:update_code" do ... run "ln -nfs #{ shared_path }/config/sunspot.yml #{ release_path }/config/sunspot.yml" run "ln -nfs #{ shared_path }/solr/data #{ release_path }/solr/data" run "ln -nfs #{ shared_path }/solr/pids #{ release_path }/solr/pids" end
.gitignore の設定
.gitignore に、以下を追加します。
config/sunspot.yml solr/data solr/pids