[pgsql-jp: 37956] Re: インデックスGIN利用時tsearch2 でのNOT検索エラー(PostgreSQL v8.2.1)
kazu koza
kosakamarines @ gmail.com
2007年 1月 20日 (土) 22:30:39 JST
コサカです。
> !testのような検索はGINインデックスの「全スキャン」になり,実行できない
> ので,弾いているようです.つまり,tsearch2+GINの仕様のような気がします.
仕様であればしょうがないですが・・・。
この場合、全文検索を目的としたテキストボックスがあり、誰でも自由に検索できるような仕組み(Namazuのような)を作成する場合は全スキャンになるような
問い合わせをプログラム側で判断してクエリーを工夫するしかなさそうな気がします。
上記の場合は「test以外」とう内容で入力された場合は
SELECT * FROM sample WHERE idxfti @@ to_tsquery('!test')ではなく
SELECT * FROM sample WHERE NOT idxfti @@ to_tsquery('test')というように・・・。
ただ、確実に全スキャンになるクエリーだとプログラム側で判別できるものなんでしょうか?
それともかなり頻繁にANALYZEを実行しておくとか?
でも更新頻度の高いテーブルの場合ANAYZEの発行間隔内にクエリーを実行された場合エラーになる可能性もあるような気がします。
つまりまだ安定して利用したいならtsearch2+GiSTという組み合わせを選択すべきということなのでしょうね。
しかし、tsearch2+GINの検索スピードには魅力があります・・・。
pgsql-jp メーリングリストの案内