これはPGroonga 1.X用のドキュメントです。新しいPGroongaを使っているならPGroonga 2.xのドキュメントを見てください。
これらはPGroonga 4.0.0で削除されました。PGroonga 4.0.0以降では利用できません。
CREATE INDEX USING pgroongaインデックスメソッドとしてPGroongaを使うためにはCREATE INDEXにUSING pgroongaを指定します。このセクションではpgroongaインデックスメソッドについて説明します。
このセクションではpgroongaインデックスメソッド関連のCREATE INDEXの構文だけ説明します。完全なCREATE INDEXの構文はPostgreSQLのCREATE INDEXのドキュメントを参照してください。
シングルカラムインデックスを作成する基本的な構文は次の通りです。
CREATE INDEX ${INDEX_NAME}
ON ${TABLE_NAME}
USING pgroonga (${COLUMN});
次のケースのときはこの構文を使えます。
text型のカラム用の全文検索インデックスを作るときtext型の配列のカラム用の全文検索インデックスを作るときtext型以外の型のカラム用の等価条件・比較条件検索用インデックスを作るときtext型以外の型の配列のカラム用の等価条件・比較条件検索用インデックスを作るときjsonb型のカラム用のサブセット検索・高度な検索用のインデックスを作るときvarchar型のカラム用の全文検索インデックスを作るときの基本的な構文は次の通りです。
CREATE INDEX ${INDEX_NAME}
ON ${TABLE_NAME}
USING pgroonga (${COLUMN} pgroonga.varchar_full_text_search_ops);
この場合はpgroonga.varchar_full_text_search_opsオペレータークラスを指定する必要があります。
CREATE INDEXのWITHオプションを使って次の項目をカスタマイズできます。
プラグイン:Groongaの拡張機能です。プラグインを登録することで追加の機能を使うことができます。追加の機能には追加のトークナイザー・ノーマライザー・トークンフィルターなどがあります。
トークナイザー:キーワードの抽出方法をカスタマイズするモジュールです。
ノーマライザー:text型とvarchar型の等価性をカスタマイズするモジュールです。
トークンフィルター:トークナイザーが抽出したキーワードをフィルターするモジュールです。
通常、これらをカスタマイズする必要はありません。なぜなら多くの場合で適切なようにデフォルト値が設定されているからです。これらをカスタマイズする機能は高度なユーザー向けの機能です。
デフォルトではプラグインとトークンフィルターは使われていません。
デフォルトのトークナイザーとノーマライザーは次の通りです。
トークナイザー:TokenBigram:bigramベースのトークナイザーです。このトークナイザーはbigramベースのトークナイズ方法とスペース区切りベースのトークナイズ方法を組み合わせています。非ASCII文字にはbigramベースのトークナイズ方法を使い、ASCII文字にはスペース区切りベースのトークナイズ方法を使います。これはASCII文字だけのクエリーで検索したときのノイズを減らすためです。
ノーマライザー:NormalizerAuto:対象のエンコーディングに合わせて適切なノーマライズ方法を選びます。たとえば、UTF-8の場合はUnicode NFKCベースのノーマライズ方法を使います。
1.2.0で追加。
プラグインを登録するにはplugins='${プラグイン名1}, ${プラグイン名2}, ..., ${プラグイン名N}'を指定します。
CREATE INDEXの最初のオプションとしてpluginsを指定しなければいけないことに注意してください。CREATE INDEXのオプションは指定された順に処理されます。指定したプラグインに含まれてるトークナイザー・ノーマライザー・トークンフィルターを使うかもしれないので、他のオプションより先にプラグインを登録しておく必要があります。
以下はTokenFilterStemトークンフィルターを使うためにtoken_filters/stemプラグインを登録する例です。
CREATE TABLE memos (
id integer,
content text
);
CREATE INDEX pgroonga_content_index
ON memos
USING pgroonga (content)
WITH (plugins='token_filters/stem',
token_filters='TokenFilterStem');
トークンフィルターについてはトークンフィルターのカスタマイズ方法を参照してください。
トークナイザーをカスタマイズするにはtokenizer='${トークナイザー名}'を指定します。通常、トークナイザーをカスタマイズする必要はありません。
以下はMeCabベースのトークナイザーを使う例です。tokenizer='TokenMecab'を指定する必要があります。TokenMecabはMeCabベースのトークナイザーの名前です。
CREATE TABLE memos (
id integer,
content text
);
CREATE INDEX pgroonga_content_index
ON memos
USING pgroonga (content)
WITH (tokenizer='TokenMecab');
tokenizer=''と指定することでトークナイザーを無効にすることができます。トークナイザーを無効にすると、完全一致検索または前方一致検索のみでカラムの値を検索できます。これにより誤ヒットが少なくなるケースがあります。例えば、タグ検索・名前検索などのときは有用です。
以下はトークナイザーを無効にする例です。
CREATE TABLE memos (
id integer,
tag text
);
CREATE INDEX pgroonga_tag_index
ON memos
USING pgroonga (tag)
WITH (tokenizer='');
tokenizer='TokenDelimit'はタグ検索で便利です。TokenDelimitも参照してください。
他のトークナイザーについてはトークナイザーを参照してください。
ノーマライザーをカスタマイズするにはnormalizer='${ノーマライザー名}'を指定してください。通常はノーマライザーをカスタマイズする必要はありません。
normalizer=''を指定するとノーマライザーを無効にすることができます。ノーマライザーを無効にすると元のカラムの値そのものでだけ検索できます。もし、ノーマライザーを使うことで誤ヒットが増える場合は無効にした方がよいでしょう。
ノーマライザーを無効にする方法は次の通りです。
CREATE TABLE memos (
id integer,
tag text
);
CREATE INDEX pgroonga_tag_index
ON memos
USING pgroonga (tag)
WITH (normalizer='');
他のノーマライザーについてはノーマライザーを参照してください。
1.2.0で追加。
トークンフィルターを使うにはtoken_filters='${トークンフィルター1}, ${トークンフィルター2}, ..., ${トークンフィルターN}'を指定します。
Groongaはデフォルトでは1つもトークンフィルターを提供していません。すべてのトークンフィルターはプラグインとして提供しています。トークンフィルターを使う場合はプラグインを登録する必要があります。
以下はtoken_filters/stemプラグインに含まれているTokenFilterStemトークンフィルターを使う例です。
CREATE TABLE memos (
id integer,
content text
);
CREATE INDEX pgroonga_content_index
ON memos
USING pgroonga (content)
WITH (plugins='token_filters/stem',
token_filters='TokenFilterStem');
token_filtersより前にpluginsを指定しなければいけないことに注意してください。CREATE INDEXに指定したオプションは指定した順に処理されます。トークンフィルターを使う前にプラグインを登録しておく必要があります。
他のトークンフィルターについてはトークンフィルターを参照してください。
1.1.6で追加。
テーブルスペースをカスタマイズするにはTABLESPACE ${TABLESPACE_NAME}を指定してください。もし高速なストレージがある場合は、テーブルスペースを変更してそのストレージにPGroongaのインデックスを置きたくなるかもしれません。
以下はテーブルスペースを変更する例です。
CREATE TABLESPACE fast LOCATION '/data/fast_disk';
CREATE TABLE memos (
id integer,
tag text
);
CREATE INDEX pgroonga_tag_index
ON memos
USING pgroonga (tag)
TABLESPACE fast;