RoRに、全文検索システムsunspotを入れる
宮ヶ瀬湖にはたくさんの車、バイク、そして警察車両も。 スーパーカーは見かけなかったが、クラシックカー、オールドカー多数。 |
|
伊勢原は農協祭り。 | |
伊勢原市太田では、大凧上げ大会。 |
VMware Player 上の CentOS 6.4 に
Rails 3.2.8
Ruby 1.8.7
という環境で、全文検索システムsunspotの導入を試みた。
導入が簡単、という触れ込みだったが、
Gemfile に
gem ’sunspot_rails’
gem ’sunspot_solr’
を追記して bundle install とかすると、
『Gem::InstallError: nokogiri requires Ruby version >= 1.9.2.』
と怒られた。
そこで、gemfileに
Gem ‘nokogiri’, ‘1.5.10′
を追加してバージョン指定したら、
Installing nokogiri (1.5.10)
Installing sunspot (2.1.0)
Installing sunspot_rails (2.1.0)
Installing sunspot_solr (2.1.0)
Your bundle is updated!
となった。
* nokogiri はlibxml2-devel、libxslt-devel を使うので、事前に
yum install libxml2-devel libxslt-devel
してインストールしておく必要がある。
続いて、コマンドラインで
rails generate sunspot_rails:install
として設定ファイルを生成させる。
『create config/sunspot.yml』
と表示されればOKだ。
bundle exec rake sunspot:solr:start
で solr を起動、
『Successfully started Solr …』
が表示される。
bundle exec rake sunspot:solr:reindex
で、検索用インデックスが生成されるのだが、その前に検索対象を決めてやる必要がある。
Model に、
searchable do
text :question
end
などとする。上の例では、"question"カラムのみを対象にしている。
Modelの記述が済んだら、reindexする。これ以降は、インデックスは対象データの書き込み時に自動的に更新される。
Controller は、
def search
search = Question.search do
fulltext params[:query]
paginate :page => params[:page], :per_page => 10
end
@questions = search.results
end
View から params[:query] で検索文字列を受け取り、Questionモデルを検索し、結果を @questions 変数に入れて View を呼び出せばいい。
paginate の行は、ページネーションをしている。無くても動く。
これだけのことなのに、えらー出まくりで何度インストールし直したことか。
さらに、production 環境で動かすのにもう一苦労してしまった。
solr ディレクトリを見ると、development ディレクトリはあるが production ディレクトリは作られない。そのため config/sunspot.ymlに、
production:
solr:
hostname: localhost
port: 8983
log_level: WARNING
path: /solr/production
などとしても動かない。
ここは
production:
solr:
hostname: localhost
port: 8983
log_level: WARNING
path: /solr/default
とすれば良い。solr/default ディレクトリは、sunspotインストールの際に作成されているはずだ。
TrackBacks
TrackBack URL : http://www.kestrel.jp/modules/wordpress/wp-trackback.php/1007
この投稿には、まだコメントが付いていません