全文検索(FTS)を使用すると、クエリを満たす自然言語ドキュメントを特定できます。このアプローチは、標準の文字列照合よりも効果的です。たとえば、「the」などの一般的な単語を無視したり、「run」、「running」、「ran」など、単語の異なる形式を照合したりするなど、言語のニュアンスを考慮するためです。
AlloyDB for PostgreSQL は、すべての全文検索機能と機能をサポートしています。AlloyDB は、GIN インデックスと GiST インデックスのサポートに加えて、PostgreSQL 17 以前での高性能な全文検索用の 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 インデックスを改善します。これにより、テーブルデータにアクセスせずに、より高速なフレーズ検索と関連性ランキングを実行できます。この拡張機能は、PostgreSQL 17 以前でサポートされています。 詳細については、RUM インデックスを作成して管理するをご覧ください。
- BM25 インデックス: 確率的な Best Matching 25 アルゴリズムを実装して、用語の頻度と長さの飽和度に基づいてドキュメントをランク付けし、業界標準のキーワード一致精度を実現します。この拡張機能は、PostgreSQL 17 以降でサポートされています。詳細については、BM25 インデックスを作成して管理するをご覧ください。
全文検索とセマンティック検索を組み合わせる
最も強力な検索実装では、RUM インデックスとベクトル検索を使用した全文検索を組み合わせることがよくあります。ハイブリッド検索を使用して、セマンティック理解とキーワードの完全一致の強みを統合し、個別の結果セットを統合して包括的なランキングを作成します。
たとえば、e コマース アプリケーションでは、まず RUM を使用した全文検索で「ランニング シューズ」などの特定のキーワードを含む商品を見つけ、ベクトル検索を使用して、ユーザーのより詳細なクエリ(「長距離トレーニング用の快適なフットウェア」など)とのセマンティック類似性に基づいて結果を見つけることができます。 次に、データベースは Reciprocal Rank Fusion(RRF)アルゴリズムを使用して、両方の検索コンポーネントのランク付けされた結果を 1 つの統合リストに統合し、最終的なランキングを生成します。
このハイブリッド アプローチの使用方法の詳細については、ハイブリッド ベクトル類似性検索を実行するをご覧ください。
次のステップ
- RUM インデックスを作成して管理する方法を学習する。
- BM25 インデックスを作成して管理する方法を学習する。
- ハイブリッド ベクトル類似性検索 を実行する方法を学習する。