既存のrailsプロジェクトにgroongaを追加する方法です。
今回はprofessorsというモデルのnameカラムに対して全文検索をかけるシステムを想定しています。
gem 'rroonga'
と追記し
$ bundle install
して導入します。
コンパイルが入るので若干時間が掛かります。
終わったら
$ rails g migration use_mroonga_in_professors_table
出来たmigrationファイルに次のように描きます
class UseMroongaInProfessorsTable < ActiveRecord::Migration def change execute <<-SQL ALTER TABLE professors ENGINE = mroonga COMMENT = 'engine "innodb"' DEFAULT CHARSET utf8 SQL execute <<-SQL ALTER TABLE professors ADD FULLTEXT INDEX index_professors_on_name (name) SQL end end
あとは
#seed.rb ## 253 for mroonga test Professor.create(name: 'alpha alpha', .... ) ## 254 for mroonga test Professor.create(name: 'beta alpha', ... )
といった初期データを用意して
$ bundle exec rake db:create ##MySQLが新規ならば $ bundle exec rake db:migrate $ bundle exec rake db:reset
としてmroongaを有効にしつつ初期データを放り込みます。
では、
$ rails c
を実行して確認します
>> pp Professor.where("match(name) against('alpha')") Professor Load (1.1ms) SELECT `professors`.* FROM `professors` WHERE (match(name) against('alpha')) [#<Professor id: 253, name: "alpha alpha", ... >, #<Professor id: 254, name: "beta alpha", ...>] >> pp Professor.where("match(name) against('beta')") Professor Load (0.9ms) SELECT `professors`.* FROM `professors` WHERE (match(name) against('beta')) [#<Professor id: 254, name: "beta alpha", ...>]
ちゃんと検索されてますね
(5/8追記)
...と思ったのですが上手く行ってませんでした。
「Can't initialize function 'mroonga_command'」と出たらエンジンがちゃんとmroongaになっていない - Bye Bye Moore
参考もと