函数 to_tsvector 将原始文本转化为 tsvector 词元向量:
SELECT to_tsvector('english', 'The Fat Rats');
to_tsvector
-----------------
'fat':2 'rat':3
冠词 The 作为停用词被自动剔除,名词复数被自动还原为词干原型,且记录了词在文本中的出现位置。
支持为文档中不同权重的部分标记字母权重标识(A、B、C、D),例如将标题标记为最高权重 A,而正文标记为普通权重 D。通过函数 setweight 完成权重打标。
系统提供了多种函数将用户输入的检索字符串解析转化为规范的 tsquery 对象:
to_tsquery:支持完整的布尔运算符(&、|、!、<->)。
plainto_tsquery:将未转义的自然语言文本转换为由逻辑与拼接的纯文本查询(忽略内部标点符号)。
phraseto_tsquery:将连续词语转换为要求严格相邻顺序出现的短语检索。
websearch_to_tsquery:支持主流搜索引擎通用的检索语法(双引号精确匹配短语、负号排除特定词汇、OR 逻辑或等)。
通过计算文档与查询之间的相关度得分,能够对海量检索结果按照匹配紧密程度进行从高到低排序。PostgreSQL 提供了两大打分函数:
ts_rank(基于词频命中统计)与 ts_rank_cd(基于词距覆盖密度 Cover Density 算法)。
SELECT title, ts_rank_cd(textsearch, query) AS rank
FROM apod, to_tsquery('neutrino|(supernova&star)') query
WHERE query @@ textsearch
ORDER BY rank DESC
LIMIT 10;
函数 ts_headline 用于从原始文档中提取包含命中关键字的上下文片段,并自动以指定 HTML 标签(如 <b>)包裹高亮显示命中词:
SELECT ts_headline('english',
'The most common type of search is to find all documents containing given query terms.',
to_tsquery('english', 'query & terms'));