MySQLで全文検索
MySQLで全文検索しようと思い立った。
というのは、自作サイトでタグとコメント欄の全文検索を行いたくなったからだ。
MySQLは日本語の全文検索に対応できていない。
MySQLはバージョン5.0の時点では英文の全文検索にしか対応していない。
日本語で全文検索を行うには、外部ツールの助けが必要になる。
その外部ツールとして senna がある。
sennaを使えばMySQLで日本語の全文検索が可能になる。
しかしsennaは純粋なライブラリである。MySQLからそれを利用するにはMySQLをコンパイルして、sennaを組み込む必要がある。この手間を省くべく、tritonnというソフトウェアが存在する。
今回はこのtritonnを利用して、MySQLでの全文検索を利用可能にした。
インストール済みの MySQLパッケージを削除
利用している ubuntuには、apt-get install で MySQLパッケージを導入していた。
これとtritonnがぶつかるので、以下のパッケージを削除した。
例:
apt-get remove mysql-client-5.0
senna 組込み済みの MySQLをインストール
すごく丁寧な説明がここにある。
http://qwik.jp/tritonn/installtarball.html
このとおりにやれば、問題なし。
DBのテーブルに FULLTEXT インデックスを追加
以下のようにして、テーブルにFULLTEXTインデックスを追加した。
class CreateVideoItems < ActiveRecord::Migration def self.up create_table (:video_items, :options => "ENGINE MyISAM DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci") do |t| t.string :vid t.string :title t.text :my_comment t.text :tags t.string :thumbnail_url t.timestamps end add_index :video_items, :vid, :unique=>true execute "CREATE FULLTEXT INDEX idx_my_comment ON video_items(my_comment)" execute "CREATE FULLTEXT INDEX ids_tags ON video_items(tags)" end def self.down drop_table :video_items end end
以下の点に注意。