これは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
を返します。
この演算子を使うには次のどれかの演算子クラスを指定する必要があります。
pgroonga_text_term_search_ops_v2
:text
用
pgroonga_text_array_term_search_ops_v2
:text[]
用
pgroonga_varchar_term_search_ops_v2
:varchar
用
例に使うサンプルスキーマとデータは次の通りです。
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)