[pgsql-jp: 35941] Re: 全文検索モジュールpg_rast

Yoshiaki Kawazu kawaz-pgsql-jp=sra.co.jp @ 7cho-me.com
2005年 9月 6日 (火) 11:13:09 JST


河津です。

pg_rast 使ってみました。

test.pl で生成されるベンチマークではデータが偏っているかと思い、
スポーツ新聞の記事をHTMLタグを削って3600個ほど投入してベンチを取ってみました。
元のテキストのサイズ合計は約16MBで、
rast のインデックスは90MB程のサイズになりました。
(もっと大量のデータで試した方が良いのかもしれませんが参考までに(^^; )

ベンチは以下の様な SELECT 文を作って行いました。
(for keyword in ファンや選手から歓声を浴びた 投球フォーム 名古屋 感動 ゴール 俺 は A; do
  echo "EXPLAIN ANALYZE SELECT count(*) FROM testnikkan WHERE id IN (SELECT pg_rast_search('/tmp/rast_test', '$keyword'));"
  echo "EXPLAIN ANALYZE SELECT count(*) FROM testnikkan WHERE content LIKE '%$keyword%';"
done) | psql -U rast 2>&1

結果は次のようになりました。
左から順にHIT数、LIKE検索時間、pg_rast検索時間、検索ワードです。

   1  65.394 460.622 ファンや選手から歓声を浴びた
   9  30.434 425.299 投球フォーム
 203  48.037 420.429 名古屋
  46  34.024 423.427 感動
 640  85.092 431.462 ゴール
  21  68.178 482.552 俺
3603 807.478 291.441 は
3603 298.035 405.731 A

大体 LIKE に比べて10倍程の高速化になるようです。
最後の二つのケースでは全件ヒットしてしまう為と思われますが
LIKE と同じか下手をしたら遅くなってしまいました。
とりあえず単純な全文検索にはrastなら漏れもないし、十分使えると思いました。
使い方も簡単だし、とても面白いと思います。

ただ、コンテンツ以外(例えば記事の作成日時)などを AND で繋げて条件を追加
した場合、LIKE 検索ならば十分小さくなった集合に対して全文検索が行われますが、
pg_rast では他の条件に関係なく全件の全文検索を行ってしまうので、
LIKEに負けるケースも増えてしまいそうです。

rast の事は詳しくないのですが、テキスト検索以外の絞込みが出来る余地があるのか、
もし出来るなら、今後 pg_rast で簡単に出来るようになる見込みはあるのか?
それを是非、聞きたいです。
よろしくお願いします。

#インデックスの分割などを自分で考えて頑張った設計をする、
#ということは出来るだけしたくないのが本音です(^^;

--
Yoshiaki Kawazu <kawaz @ kawaz.jp>
http://www.kawaz.jp/



pgsql-jp メーリングリストの案内