PostgreSQL全文检索

本文介绍了PostgreSQL的全文检索功能,包括tsvector和tsquery的使用。tsvector用于存储分词后的文本,去除重复并按顺序排列,tsquery则用于存储检索词条和布尔操作。通过to_tsvector和to_tsquery函数进行文本预处理和搜索条件构建,提供高效且智能化的全文搜索体验。
摘要由CSDN通过智能技术生成

PostgreSQL全文检索

在日常的数据处理中,我们经常会有这样的需求:从一个文本中寻找某个字符串(比如某个单词)。

对这个需求,我们可以用类似这样的SQL完成:

SELECT * FROM student WHERE text LIKE%pgsql%;
(找到含有“pgsql”的文本)。

现在我们考虑一些特殊的情形:

  1. 需要查找的文本特别多,特别大;
  2. 不做单纯的字符串匹配,而是考虑自然语言的一些特性,比如匹配某一类字符串(域名、人名)或者匹配单词的所有形式
  3. 对中文的支持。

那么此时再用以上的 “SELECT … LIKE …” 就不明智了,因为对数据库来说,这样的SQL必然走的是全表扫描,那么当文本特别多、特别大的时候,查找效率就会很低。另外,这样的SQL也不会智能到可以处理自然语言的特性。

针对这一需要PostgreSQL提供了强大的全文搜索功能可以满足这样的需求。

PostgreSQL在8.3.x版本后开始支持全文检索。执行步骤,主要分三步走:

  1. 将文档分词 token,这些token可以是数字、单词、域名、人名、email的格式等等。在PG中可以定义一个parser(分析器)来做这个工作
  2. 转换分词规则如去掉复数后缀s/es,以及加入stop词,使之不会在分词 中出现
  3. 按一定顺序查询的优化方式存储 tsvector存储,使用tsquery查询

上述的这些操作都是对文本的预处理

tsvector

一个tsvector的值是唯一分词的分类列表,把一话一句词格式化为不同的词条,在进行分词处理的时候,tsvector会自动去掉分词中重复的词条,按照一定的顺序装入。例如:

SELECT 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风间琉璃zero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值