RUM 拡張は、PostgreSQL の全文検索インデックスに位置情報とタイムスタンプ情報を追加します。これにより、ランキング、フレーズ検索、およびタイムスタンプによる順序付けを遅くする余分なヒープスキャンが不要になります。
前提条件
開始する前に、以下を確認してください。
RDS インスタンスが PostgreSQL 10 以降を実行していること。
インスタンスが PostgreSQL 14 または PostgreSQL 15 を実行している場合、マイナーエンジンバージョンが 20221030 以降であること。詳細については、「ApsaraDB RDS for PostgreSQL (RDS) インスタンスのマイナーエンジンバージョンの更新」をご参照ください。
GIN の制約と RUM ソリューション
Generalized Inverted Index (GIN) は、tsvector および tsquery 型を使用した全文検索をサポートしていますが、そのインデックスには位置情報やタイムスタンプ情報が保存されません。これにより、3つのパフォーマンスの問題が発生します。
| GIN の制約 | 影響 |
|---|---|
| 単語の位置が保存されない | ランキングには、字句の位置を取得するためにインデックススキャン後に余分なヒープスキャンが必要 |
| 単語の位置が保存されない | フレーズ検索には、フレーズ境界を検証するために余分なヒープスキャンが必要 |
| タイムスタンプ情報が保存されない | タイムスタンプによる順序付けには、形態素を持つインデックスが関連情報を保存しないため、余分なヒープスキャンが必要 |
RUM は、単語の位置とタイムスタンプ情報をインデックスに直接保存することで、これら3つの問題をすべて解決します。そのため、ランキング、フレーズ検索、またはタイムスタンプによる順序付けに追加のヒープスキャンは不要です。
RUM インデックスは、GIN インデックスよりも構築と挿入に時間がかかります。RUM は先行書き込みログ (WAL) に基づいてインデックスを生成し、GIN よりもエントリごとに多くの情報を保存します。
拡張の有効化または無効化
拡張を有効化します。
CREATE EXTENSION rum;拡張を無効化します。
DROP EXTENSION rum;演算子
RUM 拡張は、以下の演算子を提供します。
| 演算子 | 戻り値 | 説明 |
|---|---|---|
tsvector <=> tsquery | float4 | tsvector 値と tsquery 値の間の距離を返します。 |
timestamp <=> timestamp | float8 | 2つのタイムスタンプ間の距離を返します。 |
timestamp <=| timestamp | float8 | 左側のタイムスタンプまでの距離のみを返します。 |
timestamp |=> timestamp | float8 | 右側のタイムスタンプまでの距離のみを返します。 |
最後の3つの演算子は、timestamptz、int2、int4、int8、float4、float8、money、および oid の各型でも機能します。
関連ドキュメント
RUM 拡張は、オープンソース拡張と同じ使用方法に従います。完全な関数リファレンスと追加の例については、「RUM 拡張ドキュメント」をご参照ください。