Nucleusでつくる!最強のブログサイト

  4881665707
  http://www.amazon.co.jp/o/ASIN/4881665707/todaysnonsenc-22/ref=nosim/
  Nucleus CMS Japanチーム (著)
  ソーテック社
  ISBN: 4881665707
  2007/04
  3,360 円

  Nucleus の解説本.
  Nucleus に関する書籍ははじめてかも.

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 用は試してみたいと思います.