これはPGroonga 2.X and 3.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。
jsonb
型以外の型用の@@
演算子この演算子は1.2.0から非推奨です。代わりに&@~
演算子を使ってください。
@@
演算子はクエリーを使って全文検索を実行します。
クエリーの構文はWeb検索エンジンで使われている構文と似ています。たとえば、クエリーでキーワード1 OR キーワード2
と書くとOR検索できます。キーワード1 キーワード2
でAND検索できます。
column @@ query
column
は検索対象のカラムです。型はtext
型、text[]
型、varchar
型のどれかです。
query
は全文検索用のクエリーです。column
がtext
型またはtext[]
型ならquery
はtext
型です。column
がvarchar
型ならquery
はvarchar
型です。
qeury
ではGroongaのクエリー構文を使います。
この演算子を使うには次のどれかの演算子クラスを指定する必要があります。
pgroonga_text_full_text_search_ops_v2
:text
型のデフォルト
pgroonga_text_array_full_text_search_ops_v2
:text[]
型のデフォルト
pgroonga_varchar_full_text_search_ops_v2
:varchar
用
pgroonga_text_full_text_search_ops
:text
用
pgroonga_text_array_full_text_search_ops
:text[]
用
pgroonga_varchar_full_text_search_ops
:varchar
用
例に使うサンプルスキーマとデータは次の通りです。
CREATE TABLE memos (
id integer,
content text
);
CREATE INDEX pgroonga_content_index ON memos USING pgroonga (content);
INSERT INTO memos VALUES (1, 'PostgreSQLはリレーショナル・データベース管理システムです。');
INSERT INTO memos VALUES (2, 'Groongaは日本語対応の高速な全文検索エンジンです。');
INSERT INTO memos VALUES (3, 'PGroongaはインデックスとしてGroongaを使うためのPostgreSQLの拡張機能です。');
INSERT INTO memos VALUES (4, 'groongaコマンドがあります。');
@@
演算子を使うとキーワード1 キーワード2
のように複数のキーワードを指定して全文検索できます。キーワード1 OR キーワード2
のようにOR検索することもできます。
SELECT * FROM memos WHERE content @@ 'PGroonga OR PostgreSQL';
-- id | content
-- ----+---------------------------------------------------------------------------
-- 3 | PGroongaはインデックスとしてGroongaを使うためのPostgreSQLの拡張機能です。
-- 1 | PostgreSQLはリレーショナル・データベース管理システムです。
-- (2 rows)
クエリーの構文の詳細はGroongaのドキュメントを参照してください。
カラム名:@キーワード
のようにカラム名:
から始まる構文を使うことはできません。これはPGroongaで無効にしています。
前方一致検索のためにカラム名:^値
という構文を使うことができません。前方一致検索には値*
を使ってください。
TODO: Describe about SET search_path = "$user",public,pgroonga,pg_catalog;
.
&@
演算子:キーワード1つでの全文検索