Hybrid search#
ハイブリッド検索は、ナレッジベースの埋め込みのセマンティックベクター/埋め込み検索と1つ以上の追加フィルターメカニズムを組み合わせます。
リレーショナル述語フィルタリング — ソーステーブルの任意の列、たとえば
WHERE category = 'vegetarian'やWHERE published_date > '2024-01-01'などで結果をフィルタリングします。全文検索 — ネイティブPostgreSQL FTSを使用してキーワードの関連性によって結果をランク付けし、特定の単語またはフレーズが結果に表示されるようにします。
これら2つのアプローチは、セマンティック検索と並行して、独立してまたは一緒に使用できます。
AIパイプラインは、埋め込み生成を含むナレッジベースの構築を通常のように処理します。ハイブリッド検索は、クエリー時に、ベクターテーブルとソーステーブルを組み合わせたカスタムSQLを構成することにより適用されます。これは別途インストールされる機能ではなく、以下の前提条件を超えて追加のセットアップは必要ありません。
前提条件#
pgvector反復インデックススキャンは、すべてのハイブリッドクエリパターンに必要です。ネイティブFTSは、クエリでキーワードレッグを使用する場合にのみ必要です。
pgvector反復インデックススキャン#
pgvector
0.8.0以降が必要です。ハイブリッドクエリを実行する前に反復インデックススキャンを有効にします。これにより、ベクトルインデックスは、フィルタリング後でもLIMIT
が満足するまで候補を生成し続けます。 SET コマンドについては、
Writing hybrid search queries を参照してください。
ネイティブPostgreSQL FTS拡張機能は必要ありません。#
標準のPostgreSQL全文検索FTS tsvector / ts_rank
は、追加の拡張機能なしですべてのPostgresインストールで利用できます。設定手順については、
Setting up native PostgreSQL FTS を参照してください。
ボリュームソースの制限#
リレーショナル述語フィルタリングまたは全文検索を使用したハイブリッド検索は、ボリュームソースのナレッジベースではサポートされていません。ボリュームソースには、結合するバッキングPostgresテーブルがないため、フィルタまたはインデックスを作成するソーステーブルがありません。
ボリュームソースのナレッジベースは、 aidb.retrieve_text()
およびaidb.retrieve_key()
を介して標準のセマンティック検索を引き続きサポートします。
Hybrid search#
次のステップ#
Setting up native PostgreSQL FTS —
tsvector列、GINインデックス、およびトリガーをソーステーブルに追加します。Writing hybrid search queries — すべての組み合わせのSQLパターンリレーショナルフィルター、逆数ランクフュージョンRRF、重み付けリニアフュージョン。サンプルデータと予想される出力を含む作業例が含まれています。
Handling embedding service outages — クエリが正常に結果を返し続けるための3層フォールバックチェーン。
Pipelines API reference —
aidb.kb_query_encode()、aidb.rerank_text()、およびaidb.knowledge_basesビューの完全なリファレンス。