カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年
知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。
はてなで質問して諦めた件です。データベースに Tritonn 使っているときは Senna の全文検索が有効だけれども、SQLite などでも一応動作するという Rails アプリを作ろうとしています。
Tritonn (MySQL+Senna) で全文検索するには、テーブルを MyISAM で作成しなくてはなりません。Rails の migration はデフォルトでテーブルを InnoDB にするので、create_table の引数で MyISAM を指定してやる必要があります。そうすると必然的に MySQL でしか動かない migration になります。
とりあえずどうしたかといいますと、きれいな書き方ではないですが、ActiveRecord::Base.connection.adapter_name を使って MySQL の時だけ options を指定するようにしました。
例えば、記事テーブルを全文検索対象にするなら、以下のような migration クラスになります。
class CreateEntries < ActiveRecord::Migration
def self.up
options = {}
if ActiveRecord::Base.connection.adapter_name == 'MySQL'
options = { :options => 'ENGINE=MyISAM DEFAULT CHARSET=utf8' }
end
create_table :entries, options do |t|
t.text title, body
t.timestamps
end
end
def self.down
drop_table :entries
end
end
さらに全文検索用のインデックス作成なども必要に応じて分岐しますが、もうちょっと抽象度の高い書き方にならないものかなと思います。
あと、MyISAM を使うと Rails に MyISAM エンジンは向いてないと思った次第 で書いたような問題も発生します。うーん。そもそも Senna じゃない全文検索エンジンを使うべきなのかも……
読書メーターは、
最近読んだ本のページ数や冊数をグラフにしてあなたの読書量を記録・管理するwebサービスです。
本は数を読めばいいってものじゃないですが、自分がどのくらいのペースで読んでいるか把握しておくのはいいですね。
最近のコメント:
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).