高速全文檢索(RUM)
RDS PostgreSQL提供RUM插件,實現(xiàn)高速全文檢索。
您可以加入RDS PostgreSQL插件交流釘釘群(103525002795),進(jìn)行咨詢、交流和反饋,獲取更多關(guān)于插件的信息。
前提條件
RDS PostgreSQL實例為10或以上版本。
RDS PostgreSQL 14和15需要內(nèi)核版本在20221030及以上。如何查看和升級內(nèi)核小版本,請參見升級內(nèi)核小版本。
暫不支持RDS PostgreSQL 17。
背景信息
GIN索引(通用倒排索引)支持通過tsvector和tsquery兩種數(shù)據(jù)類型進(jìn)行全文檢索,但是有如下幾個問題:
排序慢
需要有關(guān)詞匯的位置信息才能進(jìn)行排序。GIN索引不存儲詞匯的位置,因此在索引掃描之后,需要額外的掃描來檢索詞匯位置。
短語查詢慢
GIN索引需要位置信息來執(zhí)行短語搜索。
時間戳排序慢
GIN索引無法在帶有詞素的索引中存儲一些相關(guān)信息,因此需要執(zhí)行額外的掃描。
基于GIN索引,RDS PostgreSQL提供RUM插件,在RUM索引中存儲額外的信息(詞匯位置或時間戳的位置信息)來解決以上問題。
RUM索引的缺點是構(gòu)建和插入時間比GIN索引慢。 這是因為需要存儲除密鑰之外的其他信息,并且RUM使用通用WAL記錄。
插件開啟與關(guān)閉
開啟插件
CREATE EXTENSION rum;
關(guān)閉插件
DROP EXTENSION rum;
通用的操作符
RUM模塊提供以下操作符。
操作符 | 返回值數(shù)據(jù)類型 | 描述 |
tsvector <=> tsquery | float4 | 返回tsvector與tsquery之間的距離。 |
timestamp <=> timestamp | float8 | 返回兩個時間戳之間的距離。 |
timestamp <=| timestamp | float8 | 只返回左側(cè)時間戳的距離。 |
timestamp |=> timestamp | float8 | 只返回右側(cè)時間戳的距離。 |
后三種操作符也適用于這些數(shù)據(jù)類型:timestamptz、int2、int4、int8、float4、float8、money、oid。
RUM的更多函數(shù)介紹,請參見官方網(wǎng)站。
使用方法
RUM的使用方法與開源方法一致,請參見官方網(wǎng)站。