2008年7月14日

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

こんにちは田中です

> 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 でテストしました

たなか


投稿者 xml-rpc : 2008年7月14日 15:12
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/75268
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。