MySQLの全文検索
以前、MySQLのパーティション機能 について書きました。パーティションで分割して大分ましにはなったものの、まだまだ時間がかかる。
原因はLIKE '%xxx%'などとやっているため。
なのでMySQLでの全文検索を試してみた。条件は唯一つ。「MySQLのカラムにたいして全文検索が出来ること」だったので、簡単に適用できそうならやってしまえ!と思って試し始めたのだが。。。
そう簡単にはいかないらしい。何せ使用条件がきつすぎる。日本語では実質的に使えない、と言う点をさておいても、パーティションと併用できないし、設定できる項目があまりに少ない。他のインデックスと同時使用も出来ないし。
以下はそのときのメモ。上がった候補をいくつか。
- SennaのMySQLバインディングを利用する
⇒MySQLの再コンパイル必要。しかし他への影響は少ない。 - MySQLの標準全文検索を利用する
⇒制約が多すぎて実質的に使えない - MySQLの標準全文検索を利用出来るようにシステム構築
⇒文字の分割部分を自作or何らかのツールを使う必要がある - Namazu,などほかのエンジンを利用する
⇒データ2重に持たなきゃ。。。
最近の全文検索エンジンはいろいろ考えられているのですね。これは自作するより利用させていただいたほうがいいや。
気になった変り種。perlのモジュールDBIx::FullTextSearch。残念ながら最近は更新が止まっているようだ。面白そうで使ってみたいと思わせるものなのだが、Sennaの優位性を覆すものではない。転置インデックスが可能なら考えてやっても良いぞって自分で作るのもありかな。。。
結論
素直にSennaを使っとけ。再コンパイルできない場合はMySQLの標準全文検索を無理やり使えるようにするか、DBIx::FullTextSearchを使ってみると面白いかも。