AlloyDB Omni の外部検索インテグレーションを使用して、Apache Solr に保存されているデータにアクセスして検索できます。この統合により、負荷の高い全文検索、複雑なクエリ解析、高度なファセット ワークロードを運用データベースから Solr にオフロードできるため、クエリ レイテンシとシステム全体のスループットが向上します。
始める前に
始める前に、次のことを行ってください。
Secret Manager に Solr 認証情報を保存する
AlloyDB Omni は、Secret Manager から Solr 認証情報を保存して読み取ります。基本 HTTP 認証の場合、Secret Manager のシークレットの値は、username:password 形式の Base64 でエンコードされた文字列にする必要があります。Secret Manager の使用方法については、Secret Manager を使用してシークレットを作成してアクセスするをご覧ください。
AlloyDB Omni が使用するサービス アカウントに、Secret Manager からシークレットを読み取る secretmanager.secretAccessor 権限があることを確認します。詳細については、シークレットへのアクセスを管理するをご覧ください。
external_search_fdw 拡張機能を有効にして構成する
Solr との統合を開始するには、外部データサーバーを介して Solr クラスタへのアクセスを構成します。
データベースに接続し、拡張機能を有効にします。
CREATE EXTENSION external_search_fdw;外部サーバーを作成します。
CREATE SERVER SOLR_SERVER_NAME FOREIGN DATA WRAPPER external_search_fdw OPTIONS ( server 'SOLR_SERVER_HOST_PORT', search_provider 'solr', auth_mode 'secret_manager', auth_method 'AUTH_METHOD', secret_path 'SECRET_PATH' );次の変数を置き換えます。
SOLR_SERVER_NAME: 外部データサーバーの名前。例:solrSOLR_SERVER_HOST_PORT: Solr クラスタの公開 URL。例:https://node1.solr.test.com:8983AUTH_METHOD: 使用する認証のタイプ。例:BasicSECRET_PATH: Solr 認証情報の Secret Manager パス。例:projects/PROJECT_ID/secrets/apikey/versions/1
Solr サーバーのユーザー マッピングを定義します。
CREATE USER MAPPING FOR CURRENT_USER SERVER SOLR_SERVER_NAME;Solr コレクションのスキーマを PostgreSQL 外部テーブルにマッピングします。
CREATE FOREIGN TABLE SOLR_FD_TABLE( metadata external_search_fdw_schema.OpaqueMetadata, SOLR_FIELDS) SERVER SOLR_SERVER_NAME OPTIONS( remote_table_name 'SOLR_COLLECTION_NAME', unique_key_sort_suffix 'UNIQUE_KEY_SORT_SUFFIX' );次の変数を置き換えます。
SOLR_FD_TABLE: Solr テーブルを表す外部データテーブルの名前。例:my-fd-solr-tableSOLR_FIELDS: 各エントリがsolr_field_name PG_DATA_TYPE形式のカンマ区切りのリスト。サポートされている Solr データ型とそれに対応する PostgreSQL 型の一覧については、サポートされているデータ型をご覧ください。UNIQUE_KEY_SORT_SUFFIX: (省略可)Solr の一意のキー フィールド、または複数のフィールドとその並べ替え順のカンマ区切りのリスト(例:myid0 ASC, myid1 DESC)。ページネーションに使用されます。デフォルトはidです。PG_DATA_TYPE: マッピング先の PostgreSQL タイプ。次に例を示します。- 文字列データの
TEXT。 INTEGER(数値データの場合)。
- 文字列データの
SOLR_COLLECTION_NAME: Solr コレクションの名前。例:my-solr-collection
Solr データにクエリを実行する
AlloyDB Omni は、SQL クエリを Solr REST API クエリに変換します。
標準 SQL クエリ
検索式には、Lucene 構文の標準 SQL を使用できます。
SELECT id, body
FROM SOLR_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';
次の変数を置き換えます。
SOLR_FD_TABLE: Solr テーブルを表す外部データテーブルの名前。例:my-fd-solr-tableFILTER:(省略可)Solr クエリに適用するフィルタ。例:a = 10 AND qubits < 105QUERY: Solr に送信するクエリ。例:body:database
クエリ DSL
ネストされたクエリの実装、カスタマイズされた並べ替え、複雑なフィルタリングなどの高度なユースケースでは、Solr JSON スタイルの Query DSL を使用します。
SELECT id, title
FROM SOLR_FD_TABLE
ORDER BY metadata <@> $${
"query": "title:solr",
"filter": ["category:software", "inStock:true"],
"sort": "price desc"
}$$
LIMIT 1;
SOLR_FD_TABLE は、Solr テーブルを表す外部データテーブルの名前に置き換えます。例: my-fd-solr-table
ハイブリッド検索
Solr データに対してハイブリッド検索を実行するには、Solr トークン検索結果を AlloyDB Omni ベクトル検索結果と結合します。
SELECT *
FROM ai.hybrid_search(
ARRAY[
'{"limit": LIMIT,
"weight": WEIGHT,
"table_name": "SOLR_FD_TABLE",
"key_column": "id",
"query_text_input": "QUERY"}'::jsonb
])
ORDER BY score DESC;
次の変数を置き換えます。
LIMIT: 返される結果の数。例:10WEIGHT: この検索エントリが Reciprocal Rank Fusion(RRF)全体に貢献する割合。例:0.5重みを指定しない場合、トラフィックは均等に分散されます。詳細については、ハイブリッド検索関数のパラメータをご覧ください。SOLR_FD_TABLE: Solr テーブルを表す外部データテーブルの名前。例:my-fd-solr-tableQUERY: Solr に送信するクエリ。例:body:database
トラブルシューティング
Solr クラスタのクエリ時に認証または接続の問題が発生した場合は、次の点を確認してください。
HTTP 401 または 403 認証エラー: Secret Manager の Solr シークレットに
username:password形式の base64 エンコード文字列が含まれていること、AlloyDB Omni が使用するサービス アカウントにsecretmanager.secretAccessor権限があることを確認します。接続タイムアウト: AlloyDB Omni と Solr エンドポイント間のネットワーク ルールとファイアウォール構成を確認します。
制限事項
読み取り専用: AlloyDB Omni は Solr データの読み取りを行いますが、書き込みは行いません。
データ マネジメント: AlloyDB Omni は、データベース データを Solr に自動的にインデックス登録しません。Solr コレクションへのデータの入力と、AlloyDB Omni のデータと Solr のインデックス付きデータとの整合性の維持は、ユーザーが行う必要があります。
スキーマ管理: AlloyDB Omni は、スキーマを Solr と自動的に同期しません。Solr コレクション スキーマが変更された場合は、対応する PostgreSQL 外部テーブルのスキーマを手動で更新します。
サポートされていない型: 地理空間型などの特殊な Solr 型はサポートされていません。
安定した並べ替え: ページネーションが正しく機能するには、Solr の並べ替え式に一意のキーが必要です。デフォルトでは、
idフィールドが使用されます。カスタム フィールド、または複数のフィールドのカンマ区切りのリストを個別の並べ替え順とともに指定するには、外部テーブルの作成時にunique_key_sort_suffixオプションを使用します。たとえば、myid0 ASC, myid1 DESCを指定します。
次のステップ
OpenSearch データにアクセスする方法を確認する。
Elasticsearch データにアクセスする方法を学習する。
ハイブリッド ベクトル類似性検索を実行する方法を学ぶ。