mecabを入れてtextsearch_jaをPostgreSQLに組み込むところまでは良かったのだけれど、いまいちな結果になった。とりあえず、詳細は後日調査するとして、メモ書き。
簡単に書いてしまうと、PostgreSQLのソースパッケージにtextsearch_jaを組み込んで、Makefileやらspecファイルを書き換えれば、contribにtextsearch_jaが入ったPostgreSQLパッケージが作れる。
で。以下のようにインデックスを作れば、少なくともMTのentry_text、つまりブログエントリーの本文に対する検索は速くなるだろうと。
CREATE INDEX "mt_entry_text" ON "public"."mt_entry" USING GIN(to_tsvector('japanese', entry_text));select entry_text from mt_entry where to_tsvector(entry_text) @@ to_tsquery('RHEL');
ところが、このSQLの結果を見てびっくり。LIKE ‘%RHEL%’でクエリを投げた時よりも遅いばかりか(6倍ぐらい遅かった)、検索結果の件数が遙かに少ない。つまり検索出来てない。うーん、やっぱりNgramじゃないとダメなのか、検索の仕方が悪いのかなぁ…。
実際、テーブルのほとんどはメモリに載ってしまっているので、違いはアルゴリズムだけだろうから、tsvectorによる処理がLIKE検索よりも遅いのだろうか。
どっちにしろ、PostgreSQLで全文検索をするプログラムを後日書きたいと思っているので、組み込み方は時間があればまとめよう。