MySQL 4.1.22 用の Tritonn パッチをテストしてみる
Solaris 10 に MeCab と Senna と MySQL をインストールする …… 失敗 の続きです.
MySQL 4.1.22 用の Tritonn パッチがリリースされたので,テストです.
- mir the tritonn - MySQL 4.1対応版リリース
http://d.hatena.ne.jp/mir/20070412/p1
前回も少し書いたのですが,Senna の MySQL パディングは Tritonn という別プロジェクトになっています.
当初は,MySQL 5.0.x 用のパッチのみの提供でしたが,今回 MySQL 4.1.22 用のパッチがリリースされました.
まず,MeCab,Senna 本体のインストールをします.インストールは [2007-03-24-1] と同じです.
Senna は 1.0.4 にバージョンアップして,Solaris 10 では UINT_MAX の未定義のエラーは出なくなっています.
次に,Tritonn パッチをダウンロードして,MySQL にパッチを当てます.
- SourceForge.jp: Project File List
http://sourceforge.jp/projects/tritonn/files/
$ tar -zxvf tritonn-1.0.2.mysql-4.1.22.senna-1.0.4.tar.gz
$ tar -zxvf mysql-4.1.22.tar.gz
$ cd mysql-4.1.22
$ patch -p1 < ../tritonn-1.0.2.mysql-4.1.22.senna-1.0.4/mysql-4.1.22.senna.diff
configure を再生成します.
$ libtoolize -c -f
$ aclocal
$ autoheader
$ automake -c -a -i
$ autoconf
$ touch sql/sql_yacc.yy
次に configure をします.
configure の際には,--with-senna と --with-mecab をオプションに追加します.
$ ./configure --prefix=/usr/local/mysql \
--with-extra-charsets=all \
--without-readline \
--enable-assembler \
--with-low-memory \
--with-senna=/usr/local/senna \
--with-mecab=/usr/local/mecab/0.9
$ make
うーむ.[2007-03-24-1] と同じエラーでした.
sql_yacc.cc: In function `int yyparse(void*)':
sql_yacc.cc:22059: error: expected primary-expression before "__attribute__"
sql_yacc.cc:22059: error: expected `;' before "__attribute__"
make[4]: *** [sql_yacc.o] Error 1
- ちなみに MySQL 5.0.37 では
まったく問題なく行きました!
$ mysql -uroot -p test
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.37-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE TABLE t1 (c1 TEXT, FULLTEXT INDEX ft USING NGRAM (c1)) ENGINE = MyISAM DEFAULT CHARSET ujis;
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO t1 VALUES ("すもももももももものうち");
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO t1 VALUES ("生麦生米生卵");
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO t1 VALUES ("東京特許許可局");
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM t1 WHERE MATCH(c1) AGAINST("特許");
+----------------+
| c1 |
+----------------+
| 東京特許許可局 |
+----------------+
1 row in set (0.00 sec)
ということで,MySQL 5.0.37 で使っています.検索は想像以上に高速です.
また,折をみて,MySQL 4.1.22 用は試してみたいと思います.