これはPGroonga 1.X用のドキュメントです。新しいPGroongaを使っているならPGroonga 2.xのドキュメントを見てください。
これらはPGroonga 4.0.0で削除されました。PGroonga 4.0.0以降では利用できません。
jsonb型用の&@~演算子1.2.1で追加。
&?演算子は1.2.2から非推奨です。代わりに&@~演算子を使ってください。
&@~はjsonb内のすべてのテキストに対してクエリーを使って全文検索を実行します。
クエリーの構文はWeb検索エンジンで使われている構文と似ています。たとえば、クエリーでキーワード1 OR キーワード2と書くとOR検索できます。
column &@~ query
columnは検索対象のカラムです。型はjsonb型です。
queryは全文検索で使うクエリーです。text型です。
qeuryではGroongaのクエリー構文を使います。
この演算子を使うには次のどれかの演算子クラスを指定する必要があります。
pgroonga.jsonb_ops:jsonb型のデフォルト
pgroonga.jsonb_ops_v2:jsonb型用
例に使うサンプルスキーマとデータは次の通りです。
CREATE TABLE logs (
  record jsonb
);
CREATE INDEX pgroonga_logs_index ON logs USING pgroonga (record);
INSERT INTO logs
     VALUES ('{
                "message": "Server is started.",
                "host":    "www.example.com",
                "tags": [
                  "web",
                  "example.com"
                ]
              }');
INSERT INTO logs
     VALUES ('{
                "message": "GET /",
                "host":    "www.example.com",
                "code":    200,
                "tags": [
                  "web",
                  "example.com"
                ]
              }');
INSERT INTO logs
     VALUES ('{
                "message": "Send to <info@example.com>.",
                "host":    "mail.example.net",
                "tags": [
                  "mail",
                  "example.net"
                ]
              }');
&@~演算子を使うとキーワード1 キーワード2のように複数のキーワードを指定して全文検索できます。キーワード1 OR キーワード2のようにOR検索することもできます。
(読みやすくするためにPostgreSQL 9.5以降で使えるjsonb_pretty()関数を使っています。)
SELECT jsonb_pretty(record) FROM logs WHERE record &@~ 'server OR mail';
--                  jsonb_pretty                 
-- ----------------------------------------------
--  {                                           +
--      "host": "www.example.com",              +
--      "tags": [                               +
--          "web",                              +
--          "example.com"                       +
--      ],                                      +
--      "message": "Server is started."         +
--  }
--  {                                           +
--      "host": "mail.example.net",             +
--      "tags": [                               +
--          "mail",                             +
--          "example.net"                       +
--      ],                                      +
--      "message": "Send to <info@example.com>."+
--  }
-- (2 rows)