VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

解析文档

功能描述

Vastbase中提供了to_tsvector函数把文档处理成tsvector数据类型。

to_tsvector将文本文档解析为token,再将token简化到词素,并返回一个tsvector。其中tsvector中列出了词素及它们在文档中的位置。文档是根据指定的或默认的文本搜索分词器进行处理的。

to_tsvector函数内部调用一个解析器,将文档的文本分解成token并给每个token指定一个类型。对于每个token,有一系列词典可供查询。词典系列因token类型的不同而不同。识别token的第一本词典将发出一个或多个标准词素来表示token。例如:

  • rats变成rat因为词典认为词rats是rat的复数形式。

  • 有些词被作为停用词(请参考停用词章节),这样它们就会被忽略,因为它们出现得太过频繁以致于搜索中没有用处。比如例子中的a、on和it。

  • 如果没有词典识别token,那么它也被忽略。在这个例子中,符号“-”被忽略,因为词典没有给它分配token类型(空间符号),即空间记号永远不会被索引。

语法解析器、词典和要索引的token类型由选定的文本搜索分词器决定。可以在同一个数据库中有多种不同的分词器,以及提供各种语言的预定义分词器。在以上例子中,使用缺省分词器english。

函数setweight可以给tsvector的记录加权重,权重是字母A、B、C、D之一。这通常用于标记来自文档不同部分的记录,比如标题、正文。之后,这些信息可以用于排序搜索结果。

因为to_tsvector(NULL)会返回空,当字段可能是空的时候,建议使用coalesce。

语法格式

to_tsvector([ config regconfig, ] document text) returns tsvector

示例

示例1:结果tsvector不包含词a、on或者it,rats变成rat,并且忽略标点符号-。

SELECT to_tsvector('english', 'a fat  cat sat on a mat - it ate a fat rats');

结果显示如下:

                     to_tsvector                     
-----------------------------------------------------
 'ate':9 'cat':3 'fat':2,11 'mat':7 'rat':12 'sat':4
(1 row)

示例2:结构化文档创建tsvector的方法:

1、创建测试表并插入数据。

CREATE TABLE tt (id int, title text, keyword text, abstract text, bod text, ti tsvector); 
INSERT INTO tt(id, title, keyword, abstract, bod) VALUES (1, 'China', 'Beijing', 'China','China, officially the People''s Republic of China (PRC), located in Asia, is the world''s most populous state.'); 

2、使用to_tsvector函数。

UPDATE tt SET ti = 
 setweight(to_tsvector(coalesce(title,'')), 'A')   || 
 setweight(to_tsvector(coalesce(keyword,'')), 'B')  || 
 setweight(to_tsvector(coalesce(abstract,'')), 'C') || 
 setweight(to_tsvector(coalesce(bod,'')), 'D'); 

3、开启扩展输出。

\x on

4、查看测试表内容:

select * from tt;

结果显示如下:

-[ RECORD 1 ]-------------------------------------------------------------------------------------------------------------------------
id       | 1
title    | China
keyword  | Beijing
abstract | China
bod      | China, officially the People's Republic of China (PRC), located in Asia, is the world's most populous state.
ti       | 'asia':15 'beij':2B 'china':1A,3C,4,11 'locat':13 'offici':5 'peopl':7 'popul':21 'prc':12 'republ':9 'state':22 'world':18