高速全文檢索(rum)
更新時間 2024-05-31 18:52:36
最近更新時間: 2024-05-31 18:52:36
分享文章
本小節主要介紹RDS-PostgreSQL的rum插件使用方法。
操作場景
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開源社區。