AlloyDB for PostgreSQL の全文検索(FTS)を使用すると、クエリを満たす自然言語ドキュメントを特定できます。このアプローチは、標準の文字列照合よりも効果的です。これは、「the」などの一般的なストップワードを無視したり、「run」、「running」、「ran」などの異なる形式の単語を照合したりするなど、言語のニュアンスを考慮するためです。
AlloyDB は、標準の PostgreSQL GIN インデックスと GiST インデックスに加えて、AlloyDB でサポートされているすべての PostgreSQL バージョン(PostgreSQL 18 以前)で高パフォーマンスの全文検索を行うための rum 拡張機能と、PostgreSQL 17 以降で Best Matching 25(BM25)関連性ランキングを提供します。
全文検索の基本コンセプト
全文検索(FTS)を効果的に実装するには、PostgreSQL がテキストを処理して検索する方法を理解する必要があります。検索の単位であるドキュメントは、通常、テキスト列または行の列の組み合わせです。インデックス構築プロセスでは、このドキュメントを解析して、単語(または語彙素、単語の基本形)を行に関連付けます。
このプロセスには、次の方法で未加工のテキストを検索可能な形式に変換する前処理パイプラインが含まれます。
- テキストをトークンに分割する。
- 一般的なストップワードを削除する。
- 単語を語幹に正規化すること。たとえば、「run」は「run」、「runs」、「running」、「ran」の語彙素です。
全文検索を使用するには、特殊なデータ型、演算子、さまざまなインデックス戦略(組み込みの PostgreSQL インデックスや高パフォーマンスの RUM インデックスなど)についても学習する必要があります。
PostgreSQL は、2 つの主要なデータ型と一致演算子を使用して FTS を管理します。
tsvector: 検索可能な形式のドキュメントを表します。個別の語彙素の並べ替えられたリストとして表されます。tsquery: 検索キーワードを表します。これには、語彙素を組み合わせることができるブール演算子が含まれます。@@:tsvectorがtsqueryと一致するかどうかを確認し、言語を認識した検索を可能にします。
AlloyDB は、組み込みの PostgreSQL がサポートする全文検索のすべてのインデックス タイプをサポートしています。インデックスの選択は、検索速度、インデックスのビルド時間、更新速度、必要な特定の検索機能(フレーズ検索や関連性ランキングなど)のバランスによって異なります。
検索の関連性と精度を最適化するために、次のいずれかを選択することもできます。
- RUM インデックス: 位置情報をインデックスに直接保存することで、標準の GIN インデックスを改善します。これにより、テーブルデータにアクセスすることなく、フレーズ検索と関連性ランキングを高速に実行できます。この拡張機能は、AlloyDB でサポートされているすべての PostgreSQL バージョン(PostgreSQL 18 以前)でサポートされています。詳細については、RUM インデックスを作成して管理するをご覧ください。
- BM25 インデックス: 確率論的な Best Matching 25 アルゴリズムを実装して、用語の頻度と長さの飽和に基づいてドキュメントをランク付けし、業界標準のキーワード マッチの精度を実現します。この拡張機能は、PostgreSQL 17 以降でサポートされています。詳細については、BM25 インデックスを作成して管理するをご覧ください。
全文検索とセマンティック検索を組み合わせる
最も強力な検索実装では、RUM インデックスを使用した全文検索とベクトル検索を組み合わせることがよくあります。ハイブリッド検索を使用して、セマンティック理解と正確なキーワード マッチングの強みを統合し、異なる結果セットを統合して包括的なランキングを作成します。
たとえば、e コマース アプリケーションでは、まず RUM を使用した全文検索で「ランニング シューズ」などの特定のキーワードを含む商品を見つけ、ベクトル検索を使用して「長距離トレーニング用の快適な靴」などのユーザーのより詳細なクエリとの意味的類似性に基づいて結果を見つけることができます。次に、データベースは、Reciprocal Rank Fusion(RRF)アルゴリズムを使用して、両方の検索コンポーネントのランク付けされた結果を 1 つの統合リストに融合し、最終的なランキングを生成します。
このハイブリッド アプローチの使用方法については、ハイブリッド ベクトル類似性検索を実行するをご覧ください。
次のステップ
- RUM インデックスを作成してクエリを実行する方法を確認する。
- BM25 インデックスを作成して管理する方法を確認する。
- ハイブリッド ベクトル類似性検索を実行する方法を学ぶ。