MySQLを利用した検索システムについて | 30歳から始めたプログラミング

MySQLを利用した検索システムについて

自前のサイトで検索システムを導入したかったので色々試してみました。


まず状況としては

・データ約30万
・タイトル用テキスト100文字
・内容用テキスト1000文字以上
・タグ用テキスト平均20文字

以上のようなデータがMySQL上にInnoDB型で入っています。(MyIsam型だったかも)

はじめは


select `title`,`text`,`tag` from TABLE where `title` like "%<検索文字列>%" || `text` like "%<検索文字列>%" || `tag` like "%<検索文字列>%";


というような検索をしていたのですが、余りにも動作が遅いので(約30秒)
MySQLの全文検索機能を試してみました。


★このサイトを参考にしました
http://www.tatamilab.jp/rnd/archives/000390.html


全文検索そのものはPHPMyADMINでボタン$30歳から始めるWEBプログラミングを押すだけで良いのですが、
全文検索は単語を細かく分けなくてはならず(引用元参照)そのためのツール
等を使い、新たに全文検索用のフィールドを作成し登録しなければなりませんでした。


なんとかテキストを全文検索用の形に変更し、データベースに登録したまでは
良かったのですが、いざ全文検索用のインデックスを追加すると元のデータの
10倍くらいにふくれあがってしまいました。


引用元によると全文検索することにより検索スピードが数10倍になると書いて
あるのですが、データ量が10倍になって相殺されてしまったのかスピードは
殆ど変わりませんでした。


テストで5000データくらいの時は驚くほど早かったのですが、30万データも
あるとインデックスが膨れすぎて期待通りの動作ができないのかもしれません。


そして結局元のlike=%%に戻し、Google検索APIを隣に設置しましたしょぼん


今回検索システムがとても難しいことを知りました。
しかし近いうちにクラウドサーバーにsenaを追加したMySQLを設置し、リベンジしたいと
思っていますパンチ!




↓超欲しい!