MySQLで TEXTフィールド等を全文検索をする際に FULL TEXT INDEXをつけますが、日本語だと機能しません。Sennaはその辺の機能を提供してくれます。
とりあえず Fedora Core サイトから MySQLのSRPMをダウンロードしまして、 Sennaサイトのインストール情報を基に ビルドし、うまくいきました。今回はmecabを使う設定でのビルド。
適当に DBとテーブルを作り、100文字程度のテキスト x 100万件をインサート。テキストは某掲示板から持ってきたものを適当に切り抜いて作りました。
select * from test where match ( val ) against ( 'です' );
こんな感じで 検索をかけましたら 0.02 秒位で結果が返ってきました(早い!)。さらに ソートをかけます。
select * from test where match ( val ) against ( 'です' ) order by id desc;
こんな感じです。そうしますと 0.3秒程度かかりました。 多少時間がかかるようですね。勿論 Sennaサイトにある パッチは当てて有ります。と思いましたら、利用するindexを指定しないといけないようです。
SELECT * FROM test force index(PRIMARY) WHERE match(val) against( 'です' ) order by id asc
こんな風にすると 0.05秒位で検索できました。
ただ結果が多い場合は出力で時間がかかります。件数が多くなるような場合は limitを入れないとキツイです。
何にしても素晴しいソフトウェアです。
今回実験した環境は
AthronXP 3200+ / 1G mem / Fedora Core 4/ MySQL 5.0.21 / mecab 0.9 / php 5.0.4
です。(2006/5/21)
Sennaはポスグレにも使えるようですが、ポスグレの場合は こんな のもあります。