[pgsql-jp: 37879] Re: lc_collat=Cだとto_tsqueryに日本語が使えない

Tatsuo Ishii ishii @ sraoss.co.jp
2006年 12月 28日 (木) 20:25:39 JST


石井です.

> 石井さんありがとうございます

どういたしまして.

> > tsearch2はCロケールでは日本語が使えません.これはtsearch2がwcstombsな
> > どのワイド文字関数にずぶずぶに依存した実装になっているからです.なんと
> > か直そうとは思い,努力しているところです:-)
> 
> 了解です。
> 陰ながら応援しています。
> 
> > ワークアラウンドとしては,to_tsqueryを使わず,
> >   SELECT * FROM foo WHERE bar @@ tsquery_in('検索語');
> > などとすればよいでしょう.
> 
> この方法でできました!!
> がシーケンシャルスキャンになっている様子、、、
> 
> うーむ、あちらをたてればこちらがたたず状態ですね

tsquery_inを呼び出すimmutableな関数を作ってあげればインデックススキャ
ンになると思います.

CREATE OR REPLACE FUNCTION myquery(str TEXT) RETURNS TSQUERY AS $$
  SELECT tsquery_in(textout($1));
$$ LANGUAGE SQL IMMUTABLE;

として,

SELECT * FROM foo WHERE bar @@ myquery('検索語');

ではどうでしょう?
--
Tatsuo Ishii
SRA OSS, Inc. Japan



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