跳转至

文本搜索函数和操作符

文本搜索函数和操作符

文本搜索操作符

注意

  • tsquery的包含操作符只考虑两个查询中的词位,而忽略组合操作符。

  • 除以下操作符外,还定义了tsvectortsquery类型的普通B-tree比较操作符(=<等)。它们对于文本搜索不是很有用,但是允许使用。例如,建在这些类型列上的唯一索引。

@@
操作符
@@
返回类型
boolean
描述
tsvector匹配tsquery吗?
示例
``` sql seaboxsql=# select to_tsvector('fat cats ate rats') @@ to_tsquery('cat & rat'); ?column?
f (1 row) ```
||
操作符
||
返回类型
tsvector
描述
连接tsvector, 也用于tsquery用OR连接
示例

``` sql seaboxsql=# select 'a:1 b:2'::tsvector || 'c:1 d:2 b:3'::tsvector; ?column?


'a':1 'b':2,5 'c':3 'd':4 (1 row)

seaboxsql=# select 'fat | rat'::tsquery || 'cat'::tsquery; ?column?


'fat' | 'rat' | 'cat' (1 row) ```

&&
操作符
&&
返回类型
tsquery
描述
将tsquery用 AND 连接起来
示例
``` sql seaboxsql=# select 'fat | rat'::tsquery && 'cat'::tsquery; ?column?
( 'fat' | 'rat' ) & 'cat' (1 row) ```
!!
操作符
!!
返回类型
tsquery
描述
对一个tsquery取反
示例
``` sql seaboxsql=# select !! 'cat'::tsquery; ?column?
!'cat' (1 row) ```
<->
操作符
<->
返回类型
tsquery
描述
tsquery后面跟着tsquery
示例
``` sql seaboxsql=# select to_tsquery('fat') <-> to_tsquery('rat'); ?column?
'fat' <-> 'rat' (1 row) ```
@>
操作符
@>
返回类型
boolean
描述
tsquery包含另一个?
示例
``` sql seaboxsql=# select 'cat'::tsquery @> 'cat & rat'::tsquery; ?column?
f (1 row) ```
<@
操作符
<@
返回类型
boolean
描述
tsquery被包含?
示例
``` sql seaboxsql=# select 'cat'::tsquery <@ 'cat & rat'::tsquery; ?column?
t (1 row) ```

文本搜索函数

注意

  • 以下函数中使用可选的regconfig参数时,如未指定或参数被忽略时,使用由GUC配置参数default_text_search_config指定的配置。
array_to_tsvector()
语法
array_to_tsvector(text[])
返回类型
tsvector
描述
把词位数组转换成tsvector
示例
``` sql seaboxsql=# select array_to_tsvector('{fat,cat,rat}'::text[]); array_to_tsvector
'cat' 'fat' 'rat' (1 row) ```
get_current_ts_config()
语法
get_current_ts_config()
返回类型
regconfig
描述
获得默认文本搜索配置
示例
``` sql seaboxsql=# select get_current_ts_config(); get_current_ts_config
simple (1 row) ```
length()
语法
length(tsvector)
返回类型
integer
描述
tsvector中的词位数
示例
``` sql seaboxsql=# select length('fat:2,4 cat:3 rat:5A'::tsvector); length

3 (1 row) ```

numnode()
语法
numnode(tsquery)
返回类型
integer
描述
tsquery中词位外加操作符的数目
示例
``` sql seaboxsql=# select numnode('(fat & rat) | cat'::tsquery); numnode

5 (1 row) ```

plainto_tsquery()
语法
plainto_tsquery([ config regconfig , ] query text)
返回类型
tsquery
描述
产生tsquery但忽略标点符号
示例
``` sql seaboxsql=# select plainto_tsquery('english', 'The Fat Rats'); plainto_tsquery
'fat' & 'rat' (1 row) ```
phraseto_tsquery()
语法
phraseto_tsquery([ config regconfig , ] query text)
返回类型
tsquery
描述
产生忽略标点搜索短语的tsquery
示例
``` sql seaboxsql=# select phraseto_tsquery('english', 'The Fat Rats'); phraseto_tsquery
'fat' <-> 'rat' (1 row) ```
websearch_to_tsquery()
语法
websearch_to_tsquery([ config regconfig , ]query text)
返回类型
tsquery
描述
从一个Web搜索风格的查询产生tsquery
示例
``` sql seaboxsql=# select websearch_to_tsquery('english', '"fat rat" or rat'); websearch_to_tsquery
'fat' <-> 'rat' | 'rat' (1 row) ```
querytree()
语法
querytree( query tsquery)
返回类型
text
描述
获得一个tsquery的可索引部分
示例
``` sql seaboxsql=# select querytree('foo & ! bar'::tsquery); querytree
'foo' (1 row) ```
setweight()
语法
setweight(vector tsvector, weight "char"), setweight(vector tsvector, weight "char",lexemes text[])
返回类型
tsvector
描述
vector的每一个元素分配权重; 包含参数lexemes时,为lexemes中列出的vector的元素分配权重
示例

``` sql seaboxsql=# select setweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A'); setweight


'cat':3A 'fat':2A,4A 'rat':5A (1 row)

seaboxsql=# select setweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A', '{cat,rat}'); setweight


'cat':3A 'fat':2,4 'rat':5A (1 row) ```

strip()
语法
strip(tsvector)
返回类型
tsvector
描述
从tsvector中移除位置和权重
示例
``` sql seaboxsql=# select strip('fat:2,4 cat:3 rat:5A'::tsvector); strip
'cat' 'fat' 'rat' (1 row) ```
to_tsquery()
语法
to_tsquery([ config regconfig , ] query text)
返回类型
tsquery
描述
规范化词并转换成tsquery
示例
``` sql seaboxsql=# select to_tsquery('english', 'The & Fat & Rats'); to_tsquery
'fat' & 'rat' (1 row) ```
to_tsvector()
语法
to_tsvector([ config regconfig , ] document text), to_tsvector([ config regconfig , ] document json(b))
返回类型
tsvector
描述
参数类型为text时,缩减文档文本成tsvector; 参数类型为json/jsonb时,把该文档中的每个字符串值缩减成一个tsvector,然后将它们按在文档中的顺序串接起来形成一个tsvector。
示例

``` sql seaboxsql=# select to_tsvector('english', 'The Fat Rats'); to_tsvector


'fat':2 'rat':3 (1 row)

seaboxsql=# select to_tsvector('english', '{"a": "The Fat Rats"}'::json); to_tsvector


'fat':2 'rat':3 (1 row)

seaboxsql=# select to_tsvector('english', '{"a": "The Fat Rats"}'::jsonb); to_tsvector


'fat':2 'rat':3 (1 row) ```

json_to_tsvector()/jsonb_to_tsvector()
语法
json(b)_to_tsvector([ config regconfig, ]document json(b), filter json(b))
返回类型
tsvector
描述
filter指定的文档中的每个值缩减为一个tsvector,然后把它们按照文档中的顺序串接起来形成一个tsvector。filter是一个jsonb数组,它列举哪些种类的元素需要被包括在结果tsvector中。filter的可能值是"string"(包括所有字符串值)、"numeric"(包括所有字符串格式的数字值)、"boolean"(包括所有字符串格式"true"/"false"的布尔值)、"key"(包括所有键)或者"all"(包括上述所有)。这些值可以被组合在一起,例如用来包括所有的字符串和数字值。
示例

``` sql seaboxsql=# select json_to_tsvector('english', '{"a": "The Fat Rats", "b": 123}'::json, '["string", "numeric"]'); json_to_tsvector


'123':5 'fat':2 'rat':3 (1 row)

seaboxsql=# select jsonb_to_tsvector('english', '{"a": "The Fat Rats", "b": 123}'::jsonb, '["string", "numeric"]'); jsonb_to_tsvector


'123':5 'fat':2 'rat':3 (1 row) ```

ts_delete()
语法
ts_delete(vector tsvector, lexeme text), ts_delete(vector tsvector, lexemes text[])
返回类型
tsvector
描述
vector中移除给定的lexeme
示例

``` sql seaboxsql=# select ts_delete('fat:2,4 cat:3 rat:5A'::tsvector, 'fat'); ts_delete


'cat':3 'rat':5A (1 row)

seaboxsql=# select ts_delete('fat:2,4 cat:3 rat:5A'::tsvector, ARRAY['fat','rat']); ts_delete


'cat':3 (1 row) ```

ts_filter()
语法
ts_filter(vector tsvector, weights "char"[])
返回类型
tsvector
描述
vector中只选择带有给定权重的元素
示例
``` sql seaboxsql=# select ts_filter('fat:2,4 cat:3b rat:5A'::tsvector, '{a,b}'); ts_filter
'cat':3B 'rat':5A (1 row) ```
ts_headline()
语法
ts_headline([ config regconfig, ] document text,query tsquery, options text]), ts_headline([ config regconfig, ] document json(b),query tsquery, options text])
返回类型
text
描述
显示一个查询匹配
示例

``` sql seaboxsql=# select ts_headline('x y z', 'z'::tsquery); ts_headline


x y z (1 row)

seaboxsql=# select ts_headline('{"a":"x y z"}'::json, 'z'::tsquery); ts_headline


{"a":"x y z"} (1 row) ```

ts_rank()
语法
ts_rank( weights float4[], ] vector tsvector,query tsquery[, normalization integer])
返回类型
float4
描述
为查询排名文档
示例
``` sql seaboxsql=# select ts_rank('Hello World'::tsvector, 'World'::tsquery); ts_rank
0.06079271 (1 row) ```
ts_rank_cd()
语法
ts_rank_cd([ weights float4[], ] vector tsvector,query tsquery[, normalization integer])
返回类型
float4
描述
使用覆盖密度为查询排名文档
示例
``` sql seaboxsql=# select ts_rank_cd('{0.1, 0.2, 0.4, 1.0}','Hello World'::tsvector, 'World'::tsquery); ts_rank_cd
  0

(1 row) ```

ts_rewrite()
语法
ts_rewrite(query tsquery, target tsquery,substitute tsquery), ts_rewrite(query tsquery, select text)
返回类型
tsquery
描述
在查询内用substitute替换target; 第二个参数为查询语句时,使用该SELECT的目标和替换者进行替换
示例

``` sql seaboxsql=# select ts_rewrite('a & b'::tsquery, 'a'::tsquery, 'foo|bar'::tsquery); ts_rewrite


'b' & ( 'foo' | 'bar' ) (1 row)

seaboxsql=# select ts_rewrite('a & b'::tsquery, 'select ''a''::tsquery, ''foo|bar''::tsquery'); ts_rewrite


'b' & ( 'bar' | 'foo' ) (1 row) ```

tsquery_phrase()
语法
tsquery_phrase(query1 tsquery, query2 tsquery), tsquery_phrase(query1 tsquery, query2 tsquery,distance integer)
返回类型
tsquery
描述
制造搜索后面跟着query2query1的查询(和<->操作符相同); 包括distcance参数时,制造查询来搜索在query1后面最大距离distance上跟着query2 的情况
示例

``` sql seaboxsql=# select tsquery_phrase(to_tsquery('fat'), to_tsquery('cat')); tsquery_phrase


'fat' <-> 'cat' (1 row)

seaboxsql=# select tsquery_phrase(to_tsquery('fat'), to_tsquery('cat'), 10); tsquery_phrase


'fat' <10> 'cat' (1 row) ```

tsvector_to_array()
语法
tsvector_to_array(tsvector)
返回类型
text[]
描述
把tsvector转换为词位数组
示例
``` sql seaboxsql=# select tsvector_to_array('fat:2,4 cat:3 rat:5A'::tsvector); tsvector_to_array
{cat,fat,rat} (1 row) ```
tsvector_update_trigger()
语法
tsvector_update_trigger()
返回类型
trigger
描述
用于自动tsvector列更新的触发器函数
示例
sql seaboxsql=# CREATE TRIGGER ... tsvector_update_trigger(tsvcol,'pg_catalog.swedish', title, body); CREATE TRIGGER (1 row)
tsvector_update_trigger_column()
语法
tsvector_update_trigger_column()
返回类型
trigger
描述
用于自动tsvector列更新的触发器函数
示例
sql seaboxsql=# CREATE TRIGGER ... tsvector_update_trigger_column(tsvcol,configcol, title, body); CREATE TRIGGER (1 row)
unnest()
语法
unnest(tsvector, OUT lexeme text, OUT positions smallint[], OUT weights text)
返回类型
setof record
描述
把一个 tsvector 扩展成一组行
示例
``` sql seaboxsql=# select unnest('fat:2,4 cat:3 rat:5A'::tsvector); unnest
(cat,{3},{D}) (fat,"{2,4}","{D,D}") (rat,{5},{A}) (3 rows) ```

文本搜索调试函数

文本搜索调试函数中的函数被单独列出,因为它们通常不被用于日常的文本搜索操作。它们有助于开发和调试新的文本搜索配置。

ts_debug()
语法
ts_debug([ config regconfig, ] document text, OUT alias text,OUT description text, OUT oken text,OUT dictionaries regdictionary[],OUT dictionary regdictionary,OUT lexemes text[])
返回类型
setof record
描述
测试一个配置
示例
``` sql seaboxsql=# select ts_debug('english', 'The Brightest supernovaes'); ts_debug
(asciiword,"Word, all ASCII",The,{english_stem},english_stem,{}) (blank,"Space symbols"," ",{},,) (asciiword,"Word, all ASCII",Brightest,{english_stem},english_stem,{brightest}) (blank,"Space symbols"," ",{},,) (asciiword,"Word, all ASCII",supernovaes,{english_stem},english_stem,{supernova}) (5 rows) ```
ts_lexize()
语法
ts_lexize(dict regdictionary, token text)
返回类型
text[]
描述
测试一个字典
示例
``` sql seaboxsql=# select ts_lexize('english_stem', 'stars'); ts_lexize
{star} (1 row) ```
ts_parse()
语法
ts_parse(parser_name text, document text, OUT tokid integer, OUT token text), ts_parse(parser_oid oid, document text, OUT tokid integer, OUT token text)
返回类型
setof record
描述
测试一个解析器
示例

``` sql seaboxsql=# select ts_parse('default', 'foo - bar'); ts_parse


(1,foo) (12," ") (12,"- ") (1,bar) (4 rows)

seaboxsql=# select ts_parse(3722, 'foo - bar'); ts_parse


(1,foo) (12," ") (12,"- ") (1,bar) (4 rows) ```

ts_token_type()
语法
ts_token_type(parser_name text, OUT tokid integer, OUT alias text, OUT description text), ts_token_type(parser_oid oid, OUT tokid integer, OUT alias text, OUT description text)
返回类型
setof record
描述
获得解析器定义的记号类型
示例

``` sql seaboxsql=# select ts_token_type('default'); ts_token_type


(1,asciiword,"Word, all ASCII") (2,word,"Word, all letters") (3,numword,"Word, letters and digits") (4,email,"Email address") (5,url,URL) (6,host,Host) (7,sfloat,"Scientific notation") (8,version,"Version number") (9,hword_numpart,"Hyphenated word part, letters and digits") (10,hword_part,"Hyphenated word part, all letters") (11,hword_asciipart,"Hyphenated word part, all ASCII") (12,blank,"Space symbols") (13,tag,"XML tag") (14,protocol,"Protocol head") (15,numhword,"Hyphenated word, letters and digits") (16,asciihword,"Hyphenated word, all ASCII") (17,hword,"Hyphenated word, all letters") (18,url_path,"URL path") (19,file,"File or path name") (20,float,"Decimal notation") (21,int,"Signed integer") (22,uint,"Unsigned integer") (23,entity,"XML entity") (23 rows)

seaboxsql=# select ts_token_type(3722); ts_token_type


(1,asciiword,"Word, all ASCII") (2,word,"Word, all letters") (3,numword,"Word, letters and digits") (4,email,"Email address") (5,url,URL) (6,host,Host) (7,sfloat,"Scientific notation") (8,version,"Version number") (9,hword_numpart,"Hyphenated word part, letters and digits") (10,hword_part,"Hyphenated word part, all letters") (11,hword_asciipart,"Hyphenated word part, all ASCII") (12,blank,"Space symbols") (13,tag,"XML tag") (14,protocol,"Protocol head") (15,numhword,"Hyphenated word, letters and digits") (16,asciihword,"Hyphenated word, all ASCII") (17,hword,"Hyphenated word, all letters") (18,url_path,"URL path") (19,file,"File or path name") (20,float,"Decimal notation") (21,int,"Signed integer") (22,uint,"Unsigned integer") (23,entity,"XML entity") (23 rows)
```

ts_stat()
语法
ts_stat(sqlquery text,[weights text,] OUT word text, OUT ndoc integer, OUT nentry integer)
返回类型
setof record
描述
获得一个tsvector列的统计
示例
``` sql seaboxsql=# select ts_stat('SELECT ''a&b''::tsvector'); ts_stat
(a&b,1,1) (1 row) ```