全文検索エンジンについて雑文

Rast は、高速な grep のようなものだと思えばたいへん優れているしライブラリとしても使いやすいと思う。もっとも、こういう単純で高速な全文検索ツールは、「分かっている人」が使うのにはとても便利だが、「分かってない人」に使ってもらうためには機能不足で、キーワードのスコア付けとかページランクとか検索語の曖昧性の解決とか、解決すべき問題が多いとも感じた。まあ、それらを考えて解決するのはライブラリ側ではなくインタフェースを作る側がすべきなんだろうけど。
たとえば、既に旧世代の検索ツールだと思われている Namazu は、形態素分析のための辞書の充実が欠かせないという弱点こそあるものの、キーワードのスコア付けに関してはデフォルトで「たいへんイイ感じ」の調整がなされていると思う。Namazu はウェブサイト内検索に特化していたということもあり、HTML を検索した際にはエレメントごと(title, h1, h2 など)にキーワードの重み付けをしたり、ディレクトリ上位のページのスコアを高くしたりなど、細かい技が実装されていた。特に、前者のように「文書のどこにそのキーワードが出現したか」という情報をスコアに反映するような技を N-gram 方式の検索に後から実装するのはわりと困難な(気がする)ので、これは大きなアドバンテージだと思う。これらの技のおかげで、きちんとメンテナンスされた辞書とインデックスを持つ Namazu の検索精度はたいへん優れていた訳だが、実際問題として辞書のメンテナンスは面倒だしそもそも形態素分析の困難さもあり、近ごろは取りこぼしの少ない N-gram 方式の方が優勢なようだ。
とは言え、先ほども書いたように N-gram だけでは解決できない問題もあるので、形態素分析によるキーワード検索と N-gram 方式での検索とのハイブリッドを模索している SennaHyper Estraier を次に試してみようと思案中。
余談。この手のツールをいじっていると、Google のエンジンが恐しく優秀であるというのがよく分かる。Google は、人手によってメンテナンスされた辞書によるキーワード検索と N-gram っぽい検索とのハイブリッドだと思われるんだが、いわゆる「普通の人」はこれを日常的に無料で使っている訳で、あらゆる検索サイトや検索ツールが常にこれと比較されるのかと思うとゾッとする。つうか、他人事ではない。