これはPGroonga 1.X用のドキュメントです。新しいPGroongaを使っているならPGroonga 2.xのドキュメントを見てください。
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;