2008年2月21日

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

板垣です。

H.Harada <umi.tanuki@xxxxx> 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@xxxxx>


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




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