jsonb型以外の型用の&?演算子

1.2.0で追加。

概要

&?演算子はクエリーを使って全文検索を実行します。

クエリーの構文はWeb検索エンジンで使われている構文と似ています。たとえば、クエリーでキーワード1 OR キーワード2と書くとOR検索できます。

構文

column &? query

columnは検索対象のカラムです。型はtext型、text[]型、varchar型のどれかです。

queryは全文検索用のクエリーです。columntext型またはtext[]型ならquerytext型です。columnvarchar型ならqueryvarchar型です。

qeuryではGroongaのクエリー構文を使います。

演算子クラス

この演算子を使うには次のどれかの演算子クラスを指定する必要があります。

使い方

例に使うサンプルスキーマとデータは次の通りです。

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で無効にしています。

前方一致検索のためにカラム名:^値という構文を使うことができません。前方一致検索には値*を使ってください。

参考