これはPGroonga 2.X and 3.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。
@>
演算子PGroongaは@>
演算子の検索をインデックスを使って高速に実現できます。
@>
演算子は組み込みのPostgreSQLの演算子です。@>
演算子は右辺の配列型の値が左辺の配列型の値のサブセットならtrue
を返します。
この演算子の構文は次の通りです。
column @> query
column
は検索対象のカラムです。text[]
型かvarchar[]
型です。
query
はクエリーとして使われます。column
と同じ型でなければいけません。
この演算子はquery
がcolumn
の値のサブセットならtrue
を返し、それ以外の時はfalse
を返します。
この演算子を使うには次のどれかの演算子クラスを指定する必要があります。
pgroonga_varchar_array_term_search_ops_v2
:varchar[]
型用
例に使うサンプルスキーマとデータは次の通りです。
CREATE TABLE memos (
tags text[]
);
CREATE INDEX pgroonga_memos_index
ON memos
USING pgroonga (tags pgroonga_text_array_term_search_ops_v2);
INSERT INTO memos VALUES (ARRAY['Groonga', 'PGroonga', 'PostgreSQL']);
INSERT INTO memos VALUES (ARRAY['Groonga', 'Mroonga', 'MySQL']);
シーケンシャルスキャンを無効にします。
SET enable_seqscan = off;
マッチする例は次の通りです。
SELECT * FROM memos WHERE tags @> ARRAY['Groonga', 'PGroonga'];
-- tags
-- -------------------------------
-- {Groonga,PGroonga,PostgreSQL}
-- (1 row)
マッチしない例は次の通りです。
SELECT * FROM memos WHERE tags @> ARRAY['Mroonga', 'PGroonga'];
-- tags
-- ------
-- (0 rows)