高速全文检索(RUM)

RDS PostgreSQL提供RUM插件,实现高速全文检索。

您可以加入RDS PostgreSQL插件交流钉钉群(103525002795),进行咨询、交流和反馈,获取更多关于插件的信息。

前提条件

RDS PostgreSQL实例为10或以上版本。

说明
  • RDS PostgreSQL 14和15需要内核版本在20221030及以上。如何查看和升级内核小版本,请参见升级内核小版本

  • 暂不支持RDS PostgreSQL 17。

背景信息

GIN索引(通用倒排索引)支持通过tsvector和tsquery两种数据类型进行全文检索,但是有如下几个问题:

  • 排序慢

    需要有关词汇的位置信息才能进行排序。GIN索引不存储词汇的位置,因此在索引扫描之后,需要额外的扫描来检索词汇位置。

  • 短语查询慢

    GIN索引需要位置信息来执行短语搜索。

  • 时间戳排序慢

    GIN索引无法在带有词素的索引中存储一些相关信息,因此需要执行额外的扫描。

基于GIN索引,RDS PostgreSQL提供RUM插件,在RUM索引中存储额外的信息(词汇位置或时间戳的位置信息)来解决以上问题。

RUM索引的缺点是构建和插入时间比GIN索引慢。 这是因为需要存储除密钥之外的其他信息,并且RUM使用通用WAL记录。

插件开启与关闭

  • 开启插件

    CREATE EXTENSION rum;
  • 关闭插件

    DROP EXTENSION rum;

通用的操作符

RUM模块提供以下操作符。

操作符

返回值数据类型

描述

tsvector <=> tsquery

float4

返回tsvector与tsquery之间的距离。

timestamp <=> timestamp

float8

返回两个时间戳之间的距离。

timestamp <=| timestamp

float8

只返回左侧时间戳的距离。

timestamp |=> timestamp

float8

只返回右侧时间戳的距离。

说明

后三种操作符也适用于这些数据类型:timestamptz、int2、int4、int8、float4、float8、money、oid。

RUM的更多函数介绍,请参见官方网站

使用方法

RUM的使用方法与开源方法一致,请参见官方网站