[pgsql-jp: 39280] Re: 日本語全文検索 textsearch-ja のご紹介

Tatsuo Ishii ishii @ sraoss.co.jp
2008年 3月 8日 (土) 09:38:21 JST


石井です.

お返事が遅くなり済みません.

> > GINに位置情報を持たせてn-gramを実現...というのは,どういうことを指して
> > いるのかちょっと分かりませんが,素のPostgreSQLでn-gramを実装するのはさ
> > ほど難しくないと思います.
> 
> http://archives.postgresql.org/pgsql-hackers/2007-05/msg00994.php
> N-gramで任意の長さの文字列の部分一致を高速に検索するためには
> 転置インデックスの"post list"にItemPointerだけでなく部分文字列の出現位置を
> 記録する必要があると考えているのですが、もしかして何か勘違いしているかも。。。

GINではないですが,tsvectorには語の出現位置があるので,それを使えない
でしょうか?

> 「素のPostgreSQLで」というのは、インデックスではなく
> 転置インデックスと等価なテーブルを作成する、という意味でしょうか。
> 
> > 山口大学の事例が発表されています.
> 
> ちょっと探した限りでは詳しい実装が見つけられなかったのですが、
> 参考となるURL等ありましたらぜひ教えていただきたいです。

技術評論社のWEB+DB PRESSだったかSDに記事があったような.後はPostgreSQL
ユーザ会のセミナーで発表されていたかも知れません.たぶんどちらも因幡さ
んという方が発表されています.

ところで,tsvectorを使って,なんちゃってN-gramをやってみました.
以下の例は,N=1です.

test=# create table ngram(t text, tv tsvector);
CREATE TABLE
test=# insert into ngram values('日本語の検索結果', '日 本 語 の 検 索 結 果');
INSERT 0 1
test=# insert into ngram values('日本語の検索と評価結果','日 本 語 の 検 索 と 評 価 結 果');
INSERT 0 1
test=# select * from ngram where tv @@ '検&索&結&果' and t like '%検索結果%';
        t         |                   tv                    
------------------+-----------------------------------------
 日本語の検索結果 | 'の' '果' '結' '検' '語' '索' '日' '本'
(1 row)

この方法では,tsvectorの制限により,大きな文書は扱えませんが,氏名,住
所,表題などの項目を高速に部分一致検索したい,という程度の目的には使え
ると思います.
--
Tatsuo Ishii
SRA OSS, Inc. Japan



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