これはPGroonga 2.X and 3.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。

&=~演算子

3.0.0で追加。

概要

&=~演算子はクエリーを使って等価検索を実行します。

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

構文

使い方は1つです。

column &=~ query
column &=~ (query, weights, index_name)::pgroonga_full_text_search_condition

1つ目の使い方は他の使い方よりもシンプルです。多くの場合は1つ目の使い方で十分です。

2つ目の使い方は検索スコアーを最適化するときに便利です。たとえば、ブログアプリケーションで「タイトルは本文よりも重要」という検索を実現できます。

2つ目の使い方は3.0.8以降で使えます。

以下は1つ目の使い方の説明です。

column &=~ query

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

queryは等価検索のクエリーです。text型です。

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

以下は2つ目の使い方の説明です。

column &@~ (query, weights, index_name)::pgroonga_full_text_search_condition

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

queryは等価検索のクエリーです。text型です。

現時点ではweightsNULLでなければいけません。

index_nameは対応するPGroongaのインデックス名です。text型です。

index_nameにはNULLを指定できます。

これはシーケンシャルサーチのときにもPGroongaのインデックスに指定した検索オプションを使えるようにするために使われます。

3.0.8以降で使えます。

演算子クラス

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

使い方

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

CREATE TABLE tags (
  id integer,
  names text[]
);

CREATE INDEX pgroonga_tag_names_index ON tags
 USING pgroonga (names pgroonga_text_array_term_search_ops_v2);
INSERT INTO tags VALUES (1, ARRAY['PostgreSQL', 'PG']);
INSERT INTO tags VALUES (2, ARRAY['Groonga', 'grn', 'groonga']);
INSERT INTO tags VALUES (3, ARRAY['PGroonga', 'pgrn', 'SQL']);

&=~演算子を使うとキーワード1 キーワード2のように複数のキーワードを指定して等価できます。キーワード1 OR キーワード2のようにOR検索することもできます。

SELECT * FROM tags WHERE names &=~ 'grn OR sql';
--  id |         names         
-- ----+-----------------------
--   2 | {Groonga,grn,groonga}
--   3 | {PGroonga,pgrn,SQL}
-- (2 rows)

参考