[pgsql-jp: 39499] Re: insensitiveな日本語検索

TANAKA Masayuki tanakamasayuki @ gmail.com
2008年 7月 14日 (月) 14:44:12 JST


こんにちは田中です

> translateを使う方法でやってみます。

この方法は非常に実装しやすいと思いますが検索速度大丈夫ですか?

# 検索用カラムを追加
create table test(
id char(4),
name varchar(30),
name_search varchar(30)
);

# 検索用カラムに正規化した文字をセット
insert into test( id, name, name_search ) values( '000', 'あいあ',
translate('あいあ', 'あいうえお', 'アイウエオ') );
insert into test( id, name, name_search ) values( '001', 'アあう',
translate('アあう', 'あいうえお', 'アイウエオ') );

# 正規化した検索文字で検索用カラムから検索
select * from test where name_search like '%'||translate('う', 'あいうえお',
'アイウエオ')||'%';

# 検索用カラムなしの場合
select * from test where translate(name, 'あいうえお', 'アイウエオ') like
'%'||translate('う', 'あいうえお', 'アイウエオ')||'%'

件数少なければどっちでも大丈夫そうですが多いとたぶん検索用カラムを
追加したほうが一般的には良いと思いますよ

PostgreSQL 8.2.4 でテストしました

たなか



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