いままでMySQL5.0.33+Senna0.8.2だった環境をMySQL5.0.37+Senna1.0.4+MeCab0.95+Tritonn1.0.2に変えた。
従来の環境では、MeCabの辞書で全文検索インデックスを作るよりN-gramの方が早いし良いかと思っていたが、Sennaがついにバージョン1になったり、やっぱり多少速度がアレになってもより正確な方が良いよねということになったりしたので、バージョンアップをすることにした。
いろいろ試行錯誤があったものも、最終的にはMySQL5.0.33を make uninstall して、5.0.37を make installしたのち、古い全文検索インデックスをいったん削除してから貼りなおした。そしてsnippet関数を使おうとしたら
ERROR:
cannot add conditions
よく考えると、5.0.37に変えた後、とくにSnippet UDFをインストールしていないのにsnippetできる方がおかしいので、senna1.0.4についていたSnippet UDFをインストールしようとしたら、
Libraries have been installed in:
/usr/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
make load すると
ERROR 1125 (HY000) at line 1: Function 'snippet' already exists
こりゃ、ご指示通りマニュアルを読む必要があるのかー。
ぐぐってみると日本語のリソースが1個しか引っかからないのが悲しい。くだんの人は、libの中のファイルが古かったのが原因だったそうな。同じように確認してみたら、私の場合はファイルが古いわけではなかった。1台まっさらなのを用意するほうが早いかなー。
古いsnippetをmake uninstall→新しいsnippetをmake install→MySQLにログインしてdrop function→make loadで解決した。そういわれれば、確かに関数がすでに存在しているなら削除してあげればいいだけの話だった。