このトピックでは、ApsaraDB RDS for PostgreSQLのRUM拡張機能を使用してフルテキスト検索を実行する方法について説明します。
前提条件
RDSインスタンスはPostgreSQL 10以降を実行します。
RDSインスタンスがPostgreSQL 14またはPostgreSQL 15を実行している場合、RDSインスタンスのマイナーエンジンバージョンは20221030以降である必要があります。 RDSインスタンスのマイナーエンジンバージョンを表示および更新する方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのマイナーエンジンバージョンの更新」をご参照ください。
この拡張機能は、PostgreSQL 17を実行するApsaraDB RDS for PostgreSQLインスタンスではサポートされていません。
背景情報
Generalized Inverted Index (GIN) では、tsvectorおよびtsqueryデータ型を使用してフルテキスト検索を実行できます。 ただし、これにより次の問題が発生する可能性があります。
遅いソート
ApsaraDB RDS for PostgreSQLは、単語の場所を取得した後にのみ単語をソートできます。 しかし、GINはワード位置を記憶しない。 ApsaraDB RDS for PostgreSQLは、GINインデックスに基づいてスキャンを実行した後、別のスキャンを実行して単語の位置を取得する必要があります。
フレーズの低速クエリ
ApsaraDB RDS for PostgreSQLは、フレーズの場所を取得した後にのみ、GINインデックスに基づいてフレーズを検索できます。
タイムスタンプのソートが遅い
GINは、形態素を含むインデックスに関連情報を格納しません。 したがって、追加のスキャンが必要である。
RUM拡張はGINに基づいて設計されています。 単語またはタイムスタンプの場所をRUMインデックスに保存できます。
ただし、RUM拡張は、インデックスの構築と挿入にGINよりも時間がかかります。 これは、RUM拡張機能がWAL (write-ahead logging) ログに基づいてインデックスを生成し、生成されたRUMインデックスには暗号化に使用されるキーよりも多くの情報が含まれているためです。
拡張機能の有効化または無効化
拡張機能の有効化
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拡張機能によって提供される機能の詳細については、公式Webサイトをご覧ください。
関連ドキュメント
RUM拡張を使用する方法は、オープンソース拡張を使用する方法と同じです。 詳細については、「公式ドキュメント」をご参照ください。