これはPGroonga 1.X用のドキュメントです。新しいPGroongaを使っているならPGroonga 2.xのドキュメントを見てください。
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)