これはPGroonga 1.X用のドキュメントです。新しいPGroongaを使っているならPGroonga 2.xのドキュメントを見てください。

CREATE INDEX USING pgroonga

インデックスメソッドとしてPGroongaを使うためにはCREATE INDEXUSING pgroongaを指定します。このセクションではpgroongaインデックスメソッドについて説明します。

構文

このセクションではpgroongaインデックスメソッド関連のCREATE INDEXの構文だけ説明します。完全なCREATE INDEXの構文はPostgreSQLのCREATE INDEXのドキュメントを参照してください。

シングルカラムインデックスを作成する基本的な構文は次の通りです。

CREATE INDEX ${INDEX_NAME}
          ON ${TABLE_NAME}
       USING pgroonga (${COLUMN});

次のケースのときはこの構文を使えます。

varchar型のカラム用の全文検索インデックスを作るときの基本的な構文は次の通りです。

CREATE INDEX ${INDEX_NAME}
          ON ${TABLE_NAME}
       USING pgroonga (${COLUMN} pgroonga.varchar_full_text_search_ops);

この場合はpgroonga.varchar_full_text_search_opsオペレータークラスを指定する必要があります。

カスタマイズ

CREATE INDEXWITHオプションを使って次の項目をカスタマイズできます。

通常、これらをカスタマイズする必要はありません。なぜなら多くの場合で適切なようにデフォルト値が設定されているからです。これらをカスタマイズする機能は高度なユーザー向けの機能です。

デフォルトではプラグインとトークンフィルターは使われていません。

デフォルトのトークナイザーとノーマライザーは次の通りです。

プラグインの登録方法

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;