| The PostgreSQL 9.0 Reference Manual - Volume 1A - SQL Language Reference
by The PostgreSQL Global Development Group Paperback (6"x9"), 454 pages ISBN 9781906966041 RRP £14.95 ($19.95) Sales of this book support the PostgreSQL project! Get a printed copy>>> |
10.1.2 Basic Text Matching
Full text searching in PostgreSQL is based on
the match operator @@, which returns
true if a tsvector
(document) matches a tsquery (query).
It doesn't matter which data type is written first:
SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector @@ 'cat & rat'::tsquery; ?column? ---------- t SELECT 'fat & cow'::tsquery @@ 'a fat cat sat on a mat and ate a fat rat'::tsvector; ?column? ---------- f
As the above example suggests, a tsquery is not just raw
text, any more than a tsvector is. A tsquery
contains search terms, which must be already-normalized lexemes, and
may combine multiple terms using AND, OR, and NOT operators.
(For details see section 6.11 Text Search Types.) There are
functions to_tsquery and plainto_tsquery
that are helpful in converting user-written text into a proper
tsquery, for example by normalizing words appearing in
the text. Similarly, to_tsvector is used to parse and
normalize a document string. So in practice a text search match would
look more like this:
SELECT to_tsvector('fat cats ate fat rats') @@
to_tsquery('fat & rat');
?column?
----------
t
Observe that this match would not succeed if written as
SELECT 'fat cats ate fat rats'::tsvector @@ to_tsquery('fat &
rat');
?column?
----------
f
since here no normalization of the word rats will occur.
The elements of a tsvector are lexemes, which are assumed
already normalized, so rats does not match rat.
The @@ operator also
supports text input, allowing explicit conversion of a text
string to tsvector or tsquery to be skipped
in simple cases. The variants available are:
tsvector @@ tsquery tsquery @@ tsvector text @@ tsquery text @@ text
The first two of these we saw already.
The form text @@ tsquery
is equivalent to to_tsvector(x) @@ y.
The form text @@ text
is equivalent to to_tsvector(x) @@ plainto_tsquery(y).
| ISBN 9781906966041 | The PostgreSQL 9.0 Reference Manual - Volume 1A - SQL Language Reference | See the print edition |