&` operator

Since 1.2.1.


&` operator searches records with search condition written in script syntax. Script syntax is a powerful syntax. You can use many operations such as full text search, prefix search, range search and so on.


column &` script

column is a column to be searched. It's text type, text[] type or varchar type.

script is a script that specifies search conditions. It's text type for text type or text[] type column. It's varchar type for varchar type column.

Syntax in script is script syntax.

Operator classes

You need to specify one of the following operator classes to use this operator:


Here are sample schema and data for examples:

  id integer,
  content text

CREATE INDEX pgroonga_content_index ON memos
  USING pgroonga (id, content pgroonga.text_full_text_search_ops_v2);
INSERT INTO memos VALUES (1, 'PostgreSQL is a relational database management system.');
INSERT INTO memos VALUES (2, 'Groonga is a fast full text search engine that supports all languages.');
INSERT INTO memos VALUES (3, 'PGroonga is a PostgreSQL extension that uses Groonga as index.');
INSERT INTO memos VALUES (4, 'There is groonga command.');

You can specify complex conditions by &` operator:

SELECT * FROM memos WHERE content &` 'id >= 2 && (content @ "engine" || content @ "rdbms")';
--  id |                                content                                 
-- ----+------------------------------------------------------------------------
--   2 | Groonga is a fast full text search engine that supports all languages.
-- (1 row)

The specified script 'id >= 2 && (content @ "engine" || content @ "rdbms")' means:

You can also use functions in the script.

Sequential scan

You can't use this operator with sequential scan.