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

ITAGAKI Takahiro itagaki.takahiro @ oss.ntt.co.jp
2008年 2月 21日 (木) 12:52:05 JST


板垣です。

H.Harada <umi.tanuki @ gmail.com> wrote:

> http://archives.postgresql.org/pgsql-hackers/2007-05/msg00994.php
> N-gramで任意の長さの文字列の部分一致を高速に検索するためには
> 転置インデックスの"post list"にItemPointerだけでなく部分文字列の出現位置を
> 記録する必要があると考えているのですが、もしかして何か勘違いしているかも。。。

(N-gram, 出現位置) というペアをインデックスに格納すること自体はできます。
ただ、出現位置を加味した効率のよい絞込みを、現状の GIN のプロトコルで
実現できるかは、よくわかりません。

以前、N-gram ベースのインデックス(出現位置は考慮しない)を作ろうと
試みたことがあるのですが、そのときは「N よりも少ないキーで検索できない」
ことが分かったため、断念しました。
(2-gram でインデックスすると、1文字のキーでは検索できません。)
このあたりは、GIN そのものの改良が必要になってきます。

現状では、インデックス・アクセスメソッドそのものを自作しない限り、
完全な組み込み型 N-gram 検索は難しいという印象です。
拡張 I/F は用意されていますが、実際に拡張を作るのはそれなりに高難度です。


> 「素のPostgreSQLで」というのは、インデックスではなく
> 転置インデックスと等価なテーブルを作成する、という意味でしょうか。

転置テーブルを作成すれば、まぁできないことはないですね。
ただ、転置テーブルとそのインデックスで、データが無駄に2倍になるのが難点ですね。

------------------------------------------------------------
板垣貴裕 <itagaki.takahiro @ oss.ntt.co.jp>





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