tsquery
tsquery类型表示检索条件,存储用于检索的词汇,并且使用布尔操作符&(AND),|(OR)和!(NOT)来组合他们,括号用来强调操作符的分组。to_tsquery函数及plainto_tsquery函数会将单词转换为tsquery类型前进行规范化处 理。
gbase=# SELECT 'fat & rat'::tsquery;
tsquery
---------------
'fat' & 'rat'
(1 row)
gbase=# SELECT 'fat & (rat | cat)'::tsquery;
tsquery
---------------------------
'fat' & ( 'rat' | 'cat' )
(1 row)
gbase=# SELECT 'fat & rat & ! cat'::tsquery;
tsquery
------------------------
'fat' & 'rat' & !'cat'
(1 row)
在没有括号的情况下,!(非)结合的最紧密,而&(和)结合的比 |(或)紧密。
tsquery中的词汇可以用一个或多个权字母来标记,这些权字母限制这些词汇只能与带有匹配权的tsvector词汇进行匹配。
gbase=# SELECT 'fat:ab & cat'::tsquery;
tsquery
------------------
'fat':AB & 'cat'
(1 row)
同样,tsquery中的词汇可以用*标记来指定前缀匹配。例如,匹配tsvector中以super开始的任意单词:
gbase=# SELECT 'super:*'::tsquery;
tsquery
-----------
'super':*
(1 row)
需要注意的是,文本搜索分词器会首先处理前缀。例如:
gbase=# SELECT to_tsvector( 'postgraduate' ) @@ to_tsquery( 'postgres:*' ) AS RESULT;
result
--------
t
(1 row)
例如,将postgres处理后得到postgr,则可以匹配postgraduate:
gbase=# SELECT to_tsquery('postgres:*');
to_tsquery
------------
'postgr':*
(1 row)
例如,将'Fat:ab & Cats'规范化转为tsquery类型:
gbase=# SELECT to_tsquery('Fat:ab & Cats');
to_tsquery
------------------
'fat':AB & 'cat'
(1 row)