これはPGroonga 2.X and 3.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。
jsonb
型用の&@
演算子1.2.1で追加。
&@
演算子はjsonb
内のすべてのテキストに対して1つのキーワードで全文検索を実行します。
column &@ keyword
column
は検索対象のカラムです。型はjsonb
型です。
keyword
は全文検索で使うキーワードです。text
型です。
この演算子を使うには次のどれかの演算子クラスを指定する必要があります。
pgroonga_jsonb_ops_v2
:jsonb
型のデフォルト
pgroonga_jsonb_ops
: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つのキーワードで全文検索できます。
(読みやすくするためにPostgreSQL 9.5以降で使えるjsonb_pretty()
関数を使っています。)
SELECT jsonb_pretty(record) FROM logs WHERE record &@ 'server';
-- jsonb_pretty
-- -------------------------------------
-- { +
-- "host": "www.example.com", +
-- "tags": [ +
-- "web", +
-- "example.com" +
-- ], +
-- "message": "Server is started."+
-- }
-- (1 row)