json_to_tsvector()
是一个系统函数,用于将json
文档中的项目转换为tsvector
词素。单词根据指定的或默认的文本搜索配置进行规范化。
json_to_tsvector()
在PostgreSQL 11中添加。
用法
json_to_tsvector ( [config
regconfig
, ]document
json
,filter
jsonb
) →tsvector
filter
是一个jsonb
值或数组,包含一个或多个(如果是数组)以下关键字
"string"
(包含所有字符串值)"numeric"
(包含所有数值)"boolean"
(包含所有布尔值)"key"
(包含所有键)"all"
(包含以上所有)
"all"
将覆盖任何其他值。
变更历史
- PostgreSQL 11
- 添加 (提交 1c1791e0)
示例
json_to_tsvector()
的基本用法示例
postgres=# SELECT json_to_tsvector('{"a": "The Quick Brown Fox", "b": "Jumps Over The Lazy Dog"}'::json, '["string"]'); json_to_tsvector -------------------------------------------------------- 'brown':3 'dog':10 'fox':4 'jump':6 'lazi':9 'quick':2 (1 row)
在filter
中包含JSON数组键
postgres=# SELECT json_to_tsvector('{"vulpes": "The Quick Brown Fox", "canine": "Jumps Over The Lazy Dog"}'::json, '["key", "string"]'); json_to_tsvector ----------------------------------------------------------------------------- 'brown':5 'canin':8 'dog':14 'fox':6 'jump':10 'lazi':13 'quick':4 'vulp':1 (1 row)
覆盖默认文本搜索配置
postgres=# SELECT json_to_tsvector('simple', '{"a": "The Quick Brown Fox", "b": "Jumps Over The Lazy Dog"}'::json, '["numeric","all"]'); json_to_tsvector -------------------------------------------------------------------------------------------- 'a':1 'b':8 'brown':5 'dog':14 'fox':6 'jumps':10 'lazy':13 'over':11 'quick':4 'the':3,12 (1 row)
如果没有任何值匹配filter
,或者filter
为空,则返回零长度的tsvector
。
postgres=# SELECT length(json_to_tsvector('{"a": "The Quick Brown Fox", "b": "Jumps Over The Lazy Dog"}'::json, '"numeric"')); length -------- 0 (1 row) postgres=# SELECT length(json_to_tsvector('simple', '{"a": "The Quick Brown Fox", "b": "Jumps Over The Lazy Dog"}'::json, '[]')); length -------- 0 (1 row)
如果提供了无效的filter
值,则会引发ERROR
。
postgres=# SELECT json_to_tsvector('simple', '{"a": "The Quick Brown Fox", "b": "Jumps Over The Lazy Dog"}'::json, '["varchar"]'); ERROR: wrong flag in flag array: "varchar" HINT: Possible values are: "string", "numeric", "boolean", "key", and "all".
参考
- PostgreSQL文档: 文本搜索函数