PostgreSQL——tsearch全文搜索

背景

全文搜索(文本搜索)提供了一种可以检索出满足某个查询条件的自然语言文档的能力,并且还可以根据文档的相关性对文档进行排序。最常见的搜索是找出所有包含给出的查询词的文档,并且以它们符合查询的程度排序输出。

文本搜索操作符在数据库里已经存在很多年了。PostgreSQL有~、~*和LIKE操作符用于文本数据类型,但是它们缺乏许多现代的信息系统需要的重要功能。

概念

从PostgreSQL8.3开始提供了文本搜索模块TSearch(Text Search),文本搜索提供了一种可以标识满足某个查询的自然语言文档的能力,并且还可以根据文档的相关性对文档进行排序。

PostgreSQL核心系统提供的TSearch模块提供了对文档(在PostgreSQL里一个文档通常是一个表中的某个元组的一个文本属性,或是几个属性的组合)及查询条件进行解析的功能,但并没有提供对解析后的结果进行进一步处理(创建索引,以支持快速的查找)的功能。

PostgreSQL在扩展模块contrib里面提供了TSearch2来支持这些功能,TSearch2实现了对文档创建GIN或者GiST索引的支持。本节将分析PostgreSQL核心系统提供的TSearch模块,其代码位于src/backend/tsearch目录下。

PostgreSQLTSearch2作为一个扩展模块,提供了对Entry创建GIN或者GiST索引的支持。通过对词位列创建GINGiST索引即可实现对文档的全文索引。

全文索引

全文索引允许对文档进行预处理并且可以保存为用于快速搜索的索引。

预处理包括文本解析、语义分析和词位存储。完成这三个过程后,解析后的词语信息就存放在TSVector结构中。

从文本解析到词位存储这一系列过程是由函数to_tsvector_byid完成的,

该函数首先调用parsetext函数对文本进行解析和语义分析,

然后再调用make_tsvector将词位信息构建成TSVector结构。

下面将对这三个过程依次进行分析。

文本解析

文本解析通过解析器将文档解析成一个个记号(含位置信息,类型信息),该过程涉及的函数在wparser_def.c文件中。
目前PostgreSQL只提供一种解析器,但它足够处理大多数纯文本及 HTML文件。

语义分析

语义分析是对解析器处理过的token文本序列通过参照词典的审核规范成标准的词(lexeme)信息。

词典用于删除那些不应该在搜索中出现的词(屏蔽词)并规范化一些有多重形式的词,这样同一个词的不同的衍生结果也可以被搜索到。

成功规范化之后的词被称作词位(lexeme)。除了改进搜索质量,规范化和删除屏蔽词可以减少文档的尺寸,从而提高性能。下面对各个词典的使用进行举例介绍

Ispell:拼写词典,例如“likes”将转换为“like”。

Simple:简单词典,例如“A NAUGHTY DOG”将转换为“naughty dog”。

Synonym:同义词典,例如“man”和“person”是同义词。

Thesaurus:知识词典,例如“personal computer”将转换为PC。

完成语义分析后,即得到一个全部处理后得到的单词信息,这些单词信息保存在ParsedText结构中。

其中的words指向一个数组,其中每一个元素都是ParsedWord类型,用于保存分析后的一个单词,数据结构中的pos和apos指针是用union结构(允许在相同的内存位置存储不同的数据类型,但只能存在一个)来保存的。当完成文本解析后,可能会遇到相同的词出现了多次的情况,这时会将相同的词合并在一起:对于只出现一次的词,使用pos来保存其出现的位置即可;

对于出现多次的词,则使用apos指针来指向一个动态数组来保存所有出现的位置。apos[0]为该词出现的次数,数组后面的值即为各次出现的位置。

由于数组的长度是不确定的,所以使用alen字段来确定动态申请内存的空间,alen初始化为2,每当apos 的长度不够时,alen即翻倍,同时申请新内存将apos数组的长度翻倍。

Parsetext的运行图

​​​​​​​词位存储

词位存储即为归总语义分析后的单词在文档中的位置,并将其出现的次数及每个位置存储下来。

TSVector是一种可搜索的数据类型,它是文档内容的一种表现形式,是出现在文档中的每个重要单词及其所有位置信息的集合。它通过一种特殊的优化结构进行组织,从而可方便快速地存取及查找。其定义如数据结构4.22所示。

TSVectorData结构中的WordEntry数组用于保存所有的关键字(单词)信息,由于关键字的数目一开始并不确定,所以使用一个数组指针,该数组的实际长度根据关键字的个数在使用时进行分配。

WordEntry的定义见数据结构4.23。(结构体成员后面的数字用来限定成员变量占用的位数)

上面分析了TSVector 的数据结构,词位存储即使用语义分析得到的ParsedText构建TSVector,该过程由函数make_tsvector完成。其执行流程如图4-37所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3281721.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Java之Java基础二十(集合[上])

Java 集合框架可以分为两条大的支线: ①、Collection,主要由 List、Set、Queue 组成: List 代表有序、可重复的集合,典型代表就是封装了动态数组的 ArrayList 和封装了链表的 LinkedList;Set 代表无序、不可重复的集…

好多人都找不到这四个提升iPhone音质的技巧

在这个快节奏的时代里,我们每天都在寻找让生活变得更美好的方式。对于iPhone用户而言,无论是享受音乐、观看视频还是接听电话,良好的音频体验无疑是提升日常幸福感的关键之一。 然而,许多人可能不知道他们的设备中隐藏着许多能够…

【WRF数据介绍第一期】静态地理数据介绍及下载

WRF数据介绍第一期:静态地理数据介绍及下载 WRF官网-静态地理数据介绍必选静态数据(Mandatory Static Data)特定应用的静态数据(Static Data for Specific Applications)可选静态数据(Optional Static Data…

逆天!吴恩达+OpenAI合作出了大模型课程!重磅推出《LLM CookBook》中文版

吴恩达老师与OpenAI合作推出的大模型系列教程,从开发者在大型模型时代的必备技能出发,深入浅出地介绍了如何基于大模型API和LangChain架构快速开发出结合大模型强大能力的应用。 这些教程非常适合开发者学习,以便开始基于LLM实际构建应用程序…

一句JS代码,实现随机颜色的生成

今天我们只用 一句JS代码,实现随机颜色的生成,首先看一下效果: 每次刷新浏览器背景颜色都不一样 实现此效果的JS函数 : let randomColor () > ...: 定义一个箭头函数randomColor,用于生成一个随机颜色。 Math.ra…

丰田精益生产模式落伍了?揭秘其背后的真相与未来展望

在竞争激烈的全球汽车市场中,丰田汽车公司凭借其独特的精益生产模式(Lean Production)一直占据着举足轻重的地位。然而,近年来,随着一系列质量丑闻的曝光,如尾气排放测试数据造假等,不禁让人质疑…

我终于搭建完成了我的个人网站!(仅分享,非教程)

先看看我的个人网站~ https://yaoqx.pages.devhttps://yaoqx.pages.dev 来看看我搭建的过程吧! (仅分享,非教程) 网站技术 前端框架:Astro主题:Frosti代码托管:Github网页部署:Cl…

【网络协议】HTTP协议详解

文章目录 一、概念 二、简史 三、特点 四、工作流程 五、使用Wireshark抓TCP、http包 六、头域 6.1、请求信息: 6.2、请求方法 6.3、响应消息 6.4、响应头域 6.5、HTTP常见的请求头 6.6、HTTP常见的响应头 七、解决HTTP无状态的问题 7.1、通过Cookies保存状态信息 7…

【Hot100】LeetCode—64. 最小路径和

目录 题目1- 思路2- 实现⭐ 最小路径和——题解思路 3- ACM 实现 题目 原题连接:64. 最小路径和 1- 思路 不同的路径 ——> 多维 dp ——> 每次只能向下或者向右一步 ——> 动规五部曲 两个方向定义递推公式 2- 实现 ⭐ 最小路径和——题解思路 class S…

谁是金融核心系统市场第一名?中兴通讯旗下金篆GoldenDB

从IDC发布的《中国银行业本地部署分布式事务型数据库市场份额,2023》报告来看,中兴通讯旗下的金篆GoldenDB以24.8%的市场份额在银行业本地部署分布式数据库市场中独占鳌头,排名“第一”。    毕竟关系着人民群众的财产安全,银行…

宝通科技携手昇腾技术首席陈仲铭,共探工业大模型与生态发展

在人工智能技术的浪潮中,宝通科技始终致力于探索和应用前沿技术,推动工业智能化的发展。7月26日,宝通科技特邀昇腾生态技术首席陈仲铭博士,为宝通员工带来了一场主题为《工业大模型与业界发展生态》的技术分享会。本次分享会不仅为…

TL-SEJ 方法:有效对抗语音伪造攻击

关键词:语音增强、迁移学习、模型鲁棒性、U-Net模型 随着人工智能技术的快速发展,基于深度学习的语音转换(Voice Conversion, VC)和文本到语音(Text-to-Speech, TTS)技术取得了显著的进步。这些语音合成技术…

盘点:ITSS服务项目经理证书的用途

ITSS服务项目经理证书,由中国信息通信研究院ITSS服务与管理研究中心开发,是ITSS服务领域的权威认证。 此证书主要面向从事ITSS服务项目管理工作的人员,通过考试获取,意味着持有者在ITSS服务项目管理方面具备专业能力和知识。 1. …

科普什么是大模型?

这半年来,“大模型”一词飞入寻常百姓家,以前只是在IT圈相对较为封闭的圈子里流传。这一词的大规模爆发,原因在于ChatGPT的推出和广泛使用。其实类似“GPT”的模型还有很多,百度,阿里,腾讯和字节跳动等公司…

BEVDet BEVDet4D

榜单上的模型还没有达到很成熟 规划控制也在bev中处理 BEVDet 以分类的方式预测一个深度。 前端图像主干网络提取特征的输入的图像是经过数据增强的,进入BEV Encoder之前,需要将图像逆变回来。图像的变化不会影响BEV空间的特征。BEV Encoder没有经过预…

替代TLD5190同步四开关升降压LED专用电源调节器,支持PWM调光功能,具有强制电流调节模式

特征:PC8655替代TLD5190  AEC-Q100合格 −设备环境温度: -40C≤TA≤125C −器件结温: -40C≤TJ≤150C  工作输入电压4.5V至55V,启动电压降至4.5V  在各种条件下效率都很高,高达96%  3%LED电流精度  高侧PMOS调…

15.2 zookeeper java client

15.2 zookeeper java client 1. Zookeeper官方1.1 依赖1.2 Zookeeper客户端连接测试1.3 Zookeeper节点操作1.3.1 zooKeeper.create创建节点1.3.2 zooKeeper.exists获取节点详情1.3.3 zooKeeper.getData获取节点数据1.3.4 zooKeeper.getChildren获取节点下所有子节点名称1.3.5 …

使用“阿里云人工智能平台 PAI”制作数字人

体验 阿里云人工智能平台 PAI PAI-DSW免费试用 https://free.aliyun.com/?spm5176.14066474.J_5834642020.5.7b34754cmRbYhg&productCodelearn https://help.aliyun.com/document_detail/2261126.html 体验PAI-DSW https://help.aliyun.com/document_detail/2261126.…

SAP S/4HANA(2024)云迁移指南 - 避免常见陷阱,优化转型项目

由于2027年是停止维护传统SAP系统的截止期限,越来越多的IT企业专注于将他们的ERP迁移到云端。他们越来越多地看到SAP新的SAP S/4HANA平台在生成式人工智能和其他创新方面为组织提供的机会。 在企业资源规划(ERP)领域,SAP长期以来一…

背景音乐怎么提取出来?3种方法一看就会

背景音乐怎么提取出来?提取背景音乐是一个相对简单且高效的过程,它让我们能够轻松地从视频或音频文件中分离出所需的音乐元素。无论是为了创作新的音乐作品、制作视频配乐,还是仅仅为了欣赏纯音乐,提取背景音乐都为我们提供了极大…