AlloyDB Omni から OpenSearch データにアクセスする

ドキュメントのバージョンを選択:

AlloyDB Omni の外部検索統合を使用して、 OpenSearch に保存されているデータにアクセスして検索できます。この統合により、データをコピーまたは移動することなく、既存の OpenSearch インデックスとリレーショナル テーブルに対してフェデレーション検索を実行できます。

始める前に

始める前に、次の操作を完了してください。

OpenSearch の認証情報を Secret Manager に保存する

AlloyDB Omni は、OpenSearch の認証情報を Secret Manager に保存して読み取ります。HTTP 基本認証の場合、Secret Manager の Secret の値は username:password という形式の文字列にする必要があります。Secret Manager の使用方法の詳細については、 Secret Manager を使用して Secret を作成してアクセスするをご覧ください。

AlloyDB Omni が使用するサービス アカウントに、Secret Manager から Secret を読み取るための secretmanager.secretAccessor 権限があることを確認してください。詳細については、 Secret へのアクセスを管理するをご覧ください。

external_search_fdw 拡張機能を有効にして構成する

OpenSearch との統合を開始するには、外部データサーバーを介して OpenSearch クラスタへのアクセスを構成します。

  1. データベースに接続して拡張機能を有効にします。

    CREATE EXTENSION external_search_fdw;
    
  2. 外部サーバーを作成します。

    CREATE SERVER OPENSEARCH_SERVER_NAME
    FOREIGN DATA WRAPPER external_search_fdw
    OPTIONS (
      server 'OPENSEARCH_SERVER_HOST_PORT',
      search_provider 'opensearch',
      auth_mode 'secret_manager',
      auth_method 'AUTH_METHOD',
      secret_path 'SECRET_PATH'
    );
    

    次の変数を置き換えます。

    • OPENSEARCH_SERVER_NAME: 外部データサーバーの名前。例: opensearch

    • OPENSEARCH_SERVER_HOST_PORT: OpenSearch クラスタの公開 URL。例: https://search-my-domain.us-east-1.es.amazonaws.com:443

    • AUTH_METHOD: 使用する認証のタイプ。例: Basic

    • SECRET_PATH: OpenSearch 認証情報の Secret Manager パス。例: projects/PROJECT_ID/secrets/opensearch-credentials/versions/1

  3. OpenSearch サーバーのユーザー マッピングを定義します。

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER OPENSEARCH_SERVER_NAME;
    
  4. OpenSearch インデックスのスキーマを PostgreSQL 外部テーブルにマッピングします。

    CREATE FOREIGN TABLE OPENSEARCH_FD_TABLE(
        metadata external_search_fdw_schema.OpaqueMetadata,
        OPENSEARCH_FIELDS)
           SERVER OPENSEARCH_SERVER_NAME
           OPTIONS(
                remote_table_name 'OPENSEARCH_INDEX_NAME'
           );
    

    次の変数を置き換えます。

    • OPENSEARCH_FD_TABLE: OpenSearch テーブルを表す外部データテーブルの名前。例: my-fd-opensearch-table

    • OPENSEARCH_FIELDS: 各エントリが opensearch_field_name PG_DATA_TYPE 形式に従うカンマ区切りのリスト。 サポートされている OpenSearch データ型と対応する PostgreSQL 型の一覧については、サポートされているデータ型をご覧ください。

    • OPENSEARCH_INDEX_NAME: OpenSearch インデックスの名前。例: my-opensearch-index

OpenSearch データをクエリする

AlloyDB Omni は、SQL クエリを OpenSearch REST API クエリに変換します。

標準 SQL クエリ

検索式には、Lucene 構文で標準 SQL を使用できます。

SELECT id, body
FROM OPENSEARCH_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';

次の変数を置き換えます。

  • OPENSEARCH_FD_TABLE: OpenSearch テーブルを表す外部データテーブルの名前。例: my-fd-opensearch-table

  • FILTER: (省略可)OpenSearch クエリに適用するフィルタ。例: a = 10 AND b < 105

  • QUERY: OpenSearch に送信するクエリ。例: body:database

クエリ DSL

高度なユースケースでは、OpenSearch JSON スタイルのクエリ ドメイン固有言語(DSL)を使用します。

SELECT id, title
FROM OPENSEARCH_FD_TABLE
ORDER BY metadata <@> $${
  "query": {
    "bool": {
      "must": { "match": { "title": "opensearch" } },
      "filter": { "term": { "category": "software" } }
    }
  },
  "sort": [
    { "price": { "order": "desc" } }
  ]
}$$
LIMIT 1;

OPENSEARCH_FD_TABLE は、OpenSearch テーブルを表す外部データテーブルの名前に置き換えます。例: my-fd-opensearch-table

OpenSearch データに対して ハイブリッド検索 を実行するには、OpenSearch トークン検索の結果を AlloyDB Omni ベクトル検索の結果と結合します。

SELECT *
FROM ai.hybrid_search(
  ARRAY[
    '{"limit": LIMIT,
      "weight": WEIGHT,
      "table_name": "OPENSEARCH_FD_TABLE",
      "key_column": "id",
      "query_text_input": "QUERY"}'::jsonb
  ])
ORDER BY score DESC;

次の変数を置き換えます。

  • LIMIT: 返す結果の数。例: 10

  • WEIGHT: この検索エントリが Reciprocal Rank Fusion(RRF)全体に与える影響。例: 0.5重みを指定しない場合は、均等に分配されます。詳細については、ハイブリッド検索関数のパラメータをご覧ください。

  • OPENSEARCH_FD_TABLE: OpenSearch テーブルを表す外部データテーブルの名前。例: my-fd-opensearch-table

  • QUERY: OpenSearch に送信するクエリ。例: body:database

トラブルシューティング

OpenSearch クラスタのクエリ時に認証または接続の問題が発生した場合は、次の点を確認してください。

  • HTTP 401 または 403 認証エラー: Secret Manager の OpenSearch Secret に username:password という形式の文字列が含まれており、サービス アカウントに secretmanager.secretAccessor 権限があることを確認します。
  • 接続タイムアウト: AlloyDB Omni と OpenSearch エンドポイント間のネットワーク ルールとファイアウォール構成を確認します。

制限事項

  • 読み取り専用: AlloyDB Omni は OpenSearch データを読み取りますが、書き込みは行いません。
  • データ管理: AlloyDB Omni は、データベース データを OpenSearch に自動的にインデックス登録しません。OpenSearch インデックスへのデータの入力と、AlloyDB Omni のデータと OpenSearch のインデックス付きデータの整合性の維持はお客様の責任で行ってください。
  • スキーマ管理: AlloyDB Omni は、スキーマを OpenSearch と自動的に同期しません。OpenSearch インデックス スキーマが変更された場合は、対応する PostgreSQL 外部テーブルのスキーマを手動で更新します。
  • サポートされていないタイプ: 地理空間型などの特殊な OpenSearch タイプはサポートされていません。
  • 認証: OpenSearch クラスタで構成された基本認証(ユーザー名とパスワード)を使用する必要があります。

次のステップ