专业只做数据库实训和认证的品牌机构

微信公众号新浪微博
免费咨询电话:400-0909-964
当前位置: 网站首页 > postgresql > pg概述 > PostgreSQL教程 -》数据类型 -》文本搜索类型

PostgreSQL教程 -》数据类型 -》文本搜索类型

文章来源: 更新时间:2023/11/7 15:17:18

在线老师点击咨询:

最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!

我要咨询

8.11. 文本搜索类型

8.11.1. tsvector

8.11.2. tsquery

PostgreSQL提供两种数据类型,它们被设计用来支持全文搜索,全文搜索是一种在自然语言的文档集合中搜索以定位那些最匹配一个查询的文档的活动。tsvector类型表示一个为文本搜索优化的形式下的文档,tsquery类型表示一个文本查询。第 12 章提供了对于这种功能的详细解释,并且第 9.13 节总结了相关的函数和操作符。

8.11.1. tsvector

一个tsvector值是一个排序的可区分词位的列表,词位是被正规化合并了同一个词的不同变种的词(详见第 12 章)。排序和去重是在输入期间自动完成的,如下例所示:

SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector;

tsvector

----------------------------------------------------

'a' 'and' 'ate' 'cat' 'fat' 'mat' 'on' 'rat' 'sat'

要表示包含空白或标点的词位,将它们用引号包围:

SELECT $$the lexeme ' ' contains spaces$$::tsvector;

tsvector

-------------------------------------------

' ' 'contains' 'lexeme' 'spaces' 'the'

(我们在这个例子中使用美元符号包围的串文字并且下一个用来避免在文字中包含双引号记号产生的混淆)。嵌入的引号和反斜线必须被双写:

SELECT $$the lexeme 'Joe''s' contains a quote$$::tsvector;

tsvector

------------------------------------------------

'Joe''s' 'a' 'contains' 'lexeme' 'quote' 'the'

可选的,整数位置可以被附加给词位:

SELECT 'a:1 fat:2 cat:3 sat:4 on:5 a:6 mat:7 and:8 ate:9 a:10 fat:11 rat:12'::tsvector;

tsvector

-------------------------------------------------------------------------------

'a':1,6,10 'and':8 'ate':9 'cat':3 'fat':2,11 'mat':7 'on':5 'rat':12 'sat':4

一个位置通常表示源词在文档中的定位。位置信息可以被用于邻近排名。位置值可以从 1 到 16383,更大的数字会被 16383。对于相同的词位出现的重复位置将被丢弃。

具有位置的词位可以进一步地被标注一个权重,它可以是A、 B、C或D。 D是默认值并且因此在输出中不会显示:

SELECT 'a:1A fat:2B,4C cat:5D'::tsvector;

tsvector

----------------------------

'a':1A 'cat':5 'fat':2B,4C

权重通常被用来反映文档结构,例如将主题词标记成与正文词不同。文本搜索排名函数可以为不同的权重标记器分配不同的优先级。

了解tsvector类型本身并不执行任何词正规化这一点很重要,它假定给它的词已经被恰当地为应用正规化过。例如,

SELECT 'The Fat Rats'::tsvector;

tsvector

--------------------

'Fat' 'Rats' 'The'

对于大部分英语文本搜索应用,上面的词将会被认为是非正规化的,但是tsvector并不在乎这一点。原始文档文本通常应该经过to_tsvector以恰当地为搜索正规化其中的词:

SELECT to_tsvector('english', 'The Fat Rats');

to_tsvector

-----------------

'fat':2 'rat':3

再次地,详情请参阅第 12 章。

8.11.2. tsquery

一个tsquery值存储要用于搜索的词位,并且使用布尔操作符&(AND)、|(OR)和!(NOT)来组合它们,还有短语搜索操作符<->(FOLLOWED BY)。也有一种 FOLLOWED BY 操作符的变体,其中N是一个整数常量,它指定要搜索的两个词位之间的距离。<->等效于<1>。

圆括号可以被用来强制对操作符分组。如果没有圆括号,!(NOT)的优先级最高,其次是<->(FOLLOWED BY),然后是&(AND),最后是|(OR)。

这里有一些例子:

SELECT 'fat & rat'::tsquery;

tsquery

---------------

'fat' & 'rat'

SELECT 'fat & (rat | cat)'::tsquery;

tsquery

---------------------------

'fat' & ( 'rat' | 'cat' )

SELECT 'fat & rat & ! cat'::tsquery;

tsquery

------------------------

'fat' & 'rat' & !'cat'

可选地,一个tsquery中的词位可以被标注一个或多个权重字母,这将限制它们只能和具有那些权重之一的tsvector词位相匹配:

SELECT 'fat:ab & cat'::tsquery;

tsquery

------------------

'fat':AB & 'cat'

此外,一个tsquery中的词位可以被标注为*来指定前缀匹配:

SELECT 'super:*'::tsquery;

tsquery

-----------

'super':*

这个查询将匹配一个tsvector中以“super”开头的任意词。

词位的引号规则和之前描述的tsvector中的词位相同;并且,正如tsvector,任何请求的词正规化必须在转换到tsquery类型之前完成。to_tsquery函数可以方便地执行这种正规化:

SELECT to_tsquery('Fat:ab & Cats');

to_tsquery

------------------

'fat':AB & 'cat'

注意to_tsquery将会以和其他词同样的方式处理前缀,这也意味着下面的比较会返回真:

SELECT to_tsvector( 'postgraduate' ) @@ to_tsquery( 'postgres:*' );

?column?

----------

t

因为postgres会被处理成postgr:

SELECT to_tsvector( 'postgraduate' ), to_tsquery( 'postgres:*' );

to_tsvector | to_tsquery

---------------+------------

'postgradu':1 | 'postgr':*

这会匹配postgraduate被处理后的形式。

本文地址:http://www.cuug.com.cn/postgresql/pggaishu/35559106397.html 转载请注明!


在线预约 抢先报名 获取课程排期

Oracle培训机构

金牌讲师<>

冉乃纲-老师CUUG金牌讲师
冉老师 CUUG金牌讲师 Oracle及RedHat高级讲师、Unix/Linux 资深专家...[详细了解老师]

免费咨询上课流程 客服在线中

陈卫星-老师CUUG金牌讲师
陈老师 CUUG金牌讲师 精通Oracle管理、备份恢复、性能优化 11年Ora...[详细了解老师]

免费咨询上课流程 客服在线中

选学校如何选择适合自己的学校

CUUG -CHINA UNIX USER GROUP,是国际UNIX组织UNIFORUM的中国代表,是国内悠久的专业UNIX培训机构,被誉为中国UNIX 的摇篮。多年来,以提高教学质量为本,强调素质教育,积极引进、消化国外的新技术,有效的结合中国....[详情]

一站式服务(从入学到就业一帮到底)

入学

学习

就业

实操

食宿
地址:北京市海淀区北清路164号28-38号院
课程咨询:010-59426307 010-59426319 400-0909-964
企业服务:137 1818 8639(陈经理)
部分信息来源于网络,如有错误请联系指正!
版权所有@北京神脑资讯技术有限公司 (CUUG,中国UNIX用户协会) Copyright 2016 ALL Rights Reserved 京ICP备11008061号-1