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

&^~|演算子

1.2.1で追加。

概要

&^~>演算子は前方一致RK検索を実行します。Rはローマ字でKはカタカナという意味です。配列の中の1つ以上のプレフィックスがマッチしたらそのレコードはマッチしたことになります。

前方一致RK検索は日本語を検索するときに便利です。

前方一致RK検索は入力補完機能を実装するときに便利です。

構文

column &^~| prefixes

columnは検索対象のカラムです。型はtext型かtext[]型です。

prefixesは検索したいプレフィックスの配列です。型はtext[]型です。

columnの値はカタカナにします。prefixesはローマ字かひらがなかカタカナにします。

この演算子はcolumnの値がprefixes中の1つ以上のプレフィックスから始まっていればtrueを返します。

演算子クラス

この演算子を使うには次のどれかの演算子クラスを指定する必要があります。

使い方

例に使うサンプルスキーマとデータは次の通りです。

CREATE TABLE tags (
  name text PRIMARY KEY,
  reading text
);

CREATE INDEX pgroonga_tags_index ON tags
  USING pgroonga (reading pgroonga_text_term_search_ops_v2);
INSERT INTO tags VALUES ('PostgreSQL',
                         'ポストグレスキューエル');
INSERT INTO tags VALUES ('Groonga',   'グルンガ');
INSERT INTO tags VALUES ('PGroonga',  'ピージールンガ');
INSERT INTO tags VALUES ('pglogical', 'ピージーロジカル');

&^~|演算子を使うとローマ字でプレフィックスを複数指定して前方一致RK検索を実行できます。

SELECT * FROM tags WHERE reading &^~| ARRAY['pi-ji-', 'posu'];
--     name    |        reading         
-- ------------+------------------------
--  PostgreSQL | ポストグレスキューエル
--  PGroonga   | ピージールンガ
--  pglogical  | ピージーロジカル
-- (3 rows)

プレフィックスにはひらがなを使うこともできます。

SELECT * FROM tags WHERE reading &^~| ARRAY['ぴーじー', 'ぽす'];
--     name    |        reading         
-- ------------+------------------------
--  PostgreSQL | ポストグレスキューエル
--  PGroonga   | ピージールンガ
--  pglogical  | ピージーロジカル
-- (3 rows)

プレフィックスにカタカナを使うこともできます。

SELECT * FROM tags WHERE reading &^~| ARRAY['ピージー', 'ポス'];
--     name    |        reading         
-- ------------+------------------------
--  PostgreSQL | ポストグレスキューエル
--  PGroonga   | ピージールンガ
--  pglogical  | ピージーロジカル
-- (3 rows)

参考