MySQL5.1にMeCabのfull-text parser pluginを入れてみた
MySQL5.0で全文検索というと、Tritonn入れたりしてSennaを使うのが常套手段。そういうところはプラグインで解決するのが5.1のやり方らしい。
- http://www.slideshare.net/hiroaki.kawai/mysqlftppc
- http://sourceforge.net/apps/mediawiki/mysqlftppc/index.php?title=Main_Page
というわけで、MySQL5.1でfull-text indexを作成出来るようになる、mysqlftppcことMySQL full-text parser plugin collectionを入れてみました。環境はCentOS5.4(x86_64)。
MeCabはこのあたりを参考にして、あらかじめセットアップ済み。
ICU(International Components for Unicode)を入れておくと、Unicodeの正規化も対応できるらしい。とりあえず入れてみた。
sudo yum install icu libicu-devel.x86_64
libicu-develを入れておかないと、icu-configが無くてmysqlftppc mecab pluginがICUを使ってくれないので注意。
からファイルを落としてきて、./configure && make && sudo make installですんなり入った。あとは、mysql -u rootから
mysql> install plugin mecab soname 'libftmecab.so'; Query OK, 0 rows affected (0.04 sec) mysql> show plugins; +------------+----------+----------------+---------------+---------+ | Name | Status | Type | Library | License | +------------+----------+----------------+---------------+---------+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | partition | ACTIVE | STORAGE ENGINE | NULL | GPL | | ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL | | BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL | | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL | | FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL | | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL | | InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL | | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | mecab | ACTIVE | FTPARSER | libftmecab.so | BSD | +------------+----------+----------------+---------------+---------+ 11 rows in set (0.00 sec) mysql> show status like 'Mecab_info'; +---------------+---------------------------------------+ | Variable_name | Value | +---------------+---------------------------------------+ | Mecab_info | with mecab 0.98, ICU 3.6(Unicode 5.0) | +---------------+---------------------------------------+ 1 row in set (0.00 sec)
プラグインのインストールは無事に出来たようなので、my.cnfの[mysqld]に
# mysqlftppc
mecab_normalization = KC
mecab_unicode_version = 3.2
mecab_dicdir = /opt/mecab/lib/mecab/dic/naist-jdic
のように設定を追加してrestart。公式のサンプルを実行してみたら、
mysql> CREATE TABLE me (c TEXT, FULLTEXT(c) WITH PARSER mecab); Query OK, 0 rows affected (0.01 sec) mysql> show create table me\G *************************** 1. row *************************** Table: me Create Table: CREATE TABLE `me` ( `c` text, FULLTEXT KEY `c` (`c`) /*!50100 WITH PARSER `mecab` */ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 1 row in set (0.00 sec) mysql> INSERT INTO me VALUES("今日の天気は晴れです。"); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM me WHERE MATCH(c) AGAINST('+"今日の天気"' IN BOOLEAN MODE); +-----------------------------------+ | c | +-----------------------------------+ | 今日の天気は晴れです。 | +-----------------------------------+ 1 row in set (0.01 sec) mysql> explain SELECT * FROM me WHERE MATCH(c) AGAINST('+"今日の天気"' IN BOOLEAN MODE); +----+-------------+-------+----------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+----------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | me | fulltext | c | c | 0 | | 1 | Using where | +----+-------------+-------+----------+---------------+------+---------+------+------+-------------+ 1 row in set (0.00 sec)
となった。これでセットアップは完了かな。
Sennaと同じくMyISAMでしか動かないんだけど、SlideShareの資料には解決できていない問題として「MyISAMしかまだ対応してない」とあるので、対応ストレージエンジンは増えていくのかも。