徒然なるままに、日ぐらしP/Cに向ひて――
メインメニュー
ブログカレンダー
2014年 4月
« 3月   5月 »
 12345
6789101112
13141516171819
20212223242526
27282930  
WordPress カテゴリ一覧
WordPress 検索


富士カメラ5

Kestrel とは、チョウゲンボウのことです。ハトくらいの小さな猛禽類、つまりワシの仲間で、ハヤブサに似ています。
チョウゲンボウにはホバリングという特技があります。よく農地の上空で空中に停止している姿が見られます。小さいけれどカッコイイ、そして最近は都会でも繁殖している頼もしいタカです。
このサイトのURLは、そんなチョウゲンボウから名前を借りました。

2014年4月27日(日曜日)

RoRに、全文検索システムsunspotを入れる

カテゴリー: - flyman @ 17時51分36秒
宮ヶ瀬湖にはたくさんの車、バイク、そして警察車両も。
スーパーカーは見かけなかったが、クラシックカー、オールドカー多数。
伊勢原は農協祭り。
伊勢原市太田では、大凧上げ大会。

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

このコメントのRSS

TrackBack URL : http://www.kestrel.jp/modules/wordpress/wp-trackback.php/1007

この投稿には、まだコメントが付いていません

コメント

_CM_NOTICE

20 queries. 0.018 sec.
Powered by WordPress Module based on WordPress ME & WordPress

ヘッドライン
テーマ選択

(4 テーマ)