操作场景
RDS-PostgreSQL支持 rum
插件,RUM
索引作为一个全文索引类型,是GIN全文索引的扩展。与内建的GIN和GiST全文索引的区别是它是以插件包的形式存在。
前提条件
- 请确保您的实例内核大版本满足,本插件所支持的内核版本,请参考支持的版本插件列表。
注意事项
- 由于与
smlar
插件存在相同运维符号%
,因此无法与其共同创建并使用。
插件使用
- 安装插件
CREATE EXTENSION IF NOT EXISTS rum;
- 卸载插件
DROP EXTENSION IF EXISTS rum;
使用示例
RUM模块提供以下操作符。
操作符 | 返回值数据类型 | 描述 |
---|---|---|
tsvector <=> tsquery | float4 | 返回tsvector与tsquery之间的距离。 |
timestamp <=> timestamp | float8 | 返回两个时间戳之间的距离。 |
timestamp <= | timestamp | float8 |
timestamp | => timestamp | float8 |
示例
-- 1.创建表。
CREATE TABLE test_rum(t text, a tsvector);
CREATE TRIGGER tsvectorupdate
BEFORE UPDATE OR INSERT ON test_rum
FOR EACH ROW EXECUTE PROCEDURE tsvector_update_trigger('a', 'pg_catalog.english', 't');
INSERT INTO test_rum(t) VALUES ('The situation is most beautiful');
INSERT INTO test_rum(t) VALUES ('It is a beautiful');
INSERT INTO test_rum(t) VALUES ('It looks like a beautiful place');
--2.创建rum索引。
CREATE INDEX rumidx ON test_rum USING rum (a rum_tsvector_ops);
--3.执行run查询。
SELECT t, a <=> to_tsquery('english', 'beautiful | place') AS rank
FROM test_rum
WHERE a @@ to_tsquery('english', 'beautiful | place')
ORDER BY a <=> to_tsquery('english', 'beautiful | place');
SELECT t, a <=> to_tsquery('english', 'place | situation') AS rank
FROM test_rum
WHERE a @@ to_tsquery('english', 'place | situation')
ORDER BY a <=> to_tsquery('english', 'place | situation');
常见问题
此插件使用方法与开源方法一致,请详见rum开源社区。