日本語全文探索

職場で作っている小規模検索エンジンですが、
クロール階数を3段ぐらいまで増やしたところ、取得ファイル数が6千を超えました。
mySQLに、
url VARCHAR(256),text TEXTで格納して、textに対してLIKE('%文字列%')で部分一致検索をかけていたんですが、
さすがにかなり時間がかかるようになってしまいました。
調べたところ、高速に検索できるように前もってINDEXをMySQL自体で作れるようです。
さっそくやってみたところ確かに速くなりました。


しかし、そのままでは日本語には対応してません(英語の場合は単語が空白で分けられているので、空白を分かち書きとしてINDEXが作られる)
日本語は、空白などが無いため、例えば「検索できない」と本文があっても「検索」でも「できない」でも「ない」でも検索がヒットする必要がある。
ということは、検索、できない、ない、などと形態素解析ツールで分割してINDEXを作っておく必要がある。
具体的には、meCabなどで分割して、文字コードユニコードで入れておけばいいらしい(昔のmySQLではエンコードする必要があったらしい)
いちおうPCにはkakasiは入れてるので、明日は、kakasi分かち書きしてINSERTしてみようと思う。


もしくは、Namazuなどの形態素解析ツールを併用するINDEX作成検索エンジンを利用した方が楽かも。
作って覚えるのが目的などで色々とやってみましょう。
調べると他にも、SeeNaという日本語検索エンジンがあるようで、未来検索ブラジルで使われているようです。
転置INDEXという辞書の逆引きをする仕組みがあるので効率の良い検索ができるらしい。


隣のチームからアンテナみたいな更新の差分をRSSで出力するやつ作って欲しいと言われたので、そのへんもやってみようと思う。
アンテナならクローラーはリンクを抽出しないでいいし、階層も考えないでいいので、まだ楽と思う。