Auf OpenSearch-Daten über AlloyDB Omni zugreifen

Wählen Sie eine Dokumentationsversion aus:

Sie können mit der externen Suchintegration in AlloyDB Omni auf Daten zugreifen, die in OpenSearch gespeichert sind, und diese durchsuchen. Mit dieser Integration können Sie eine föderierte Suche über vorhandene OpenSearch-Indizes und Ihre relationalen Tabellen hinweg durchführen, ohne Daten kopieren oder verschieben zu müssen.

Hinweis

Führen Sie zuerst die folgenden Schritte aus:

OpenSearch-Anmeldedaten in Secret Manager speichern

AlloyDB Omni speichert und liest Ihre OpenSearch-Anmeldedaten aus Secret Manager. Bei der HTTP-Basisauthentifizierung muss der Wert des Secrets in Secret Manager ein String im Format username:password sein. Weitere Informationen zur Verwendung von Secret Manager finden Sie unter Secret mit Secret Manager erstellen und darauf zugreifen.

Achten Sie darauf, dass das von AlloyDB Omni verwendete Dienstkonto die Berechtigung secretmanager.secretAccessor hat, um das Secret aus Secret Manager zu lesen. Weitere Informationen finden Sie unter Zugriff auf Secrets verwalten. Informationen zum Konfigurieren des Dienstkontoschlüssel-Secrets in Ihrem Kubernetes-Datenbankcluster finden Sie unter Kubernetes-Secret mit dem Dienstkontoschlüssel erstellen und Datenbankcluster mit AlloyDB AI erstellen.

external_search_fdw-Erweiterung aktivieren und konfigurieren

Wenn Sie die Integration in OpenSearch starten möchten, konfigurieren Sie den Zugriff auf Ihren OpenSearch-Cluster über einen externen Datenserver.

  1. Stellen Sie eine Verbindung zur Datenbank her und aktivieren Sie die Erweiterung:

    CREATE EXTENSION external_search_fdw;
    
  2. Erstellen Sie einen externen Server:

    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'
    );
    

    Ersetzen Sie die folgenden Variablen:

    • OPENSEARCH_SERVER_NAME: Name für Ihren externen Datenserver. Beispiel: opensearch.

    • OPENSEARCH_SERVER_HOST_PORT: Öffentliche URL für Ihren OpenSearch-Cluster. Beispiel: https://search-my-domain.us-east-1.es.amazonaws.com:443

    • AUTH_METHOD: Der zu verwendende Authentifizierungstyp. Beispiel: Basic.

    • SECRET_PATH: Secret Manager-Pfad zu Ihren OpenSearch-Authentifizierungsdaten. Beispiel: projects/PROJECT_ID/secrets/opensearch-credentials/versions/1

  3. Definieren Sie die Nutzerzuordnung für den OpenSearch-Server:

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER OPENSEARCH_SERVER_NAME;
    
  4. Ordnen Sie das Schema Ihres OpenSearch-Index einer externen PostgreSQL-Tabelle zu:

    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'
           );
    

    Ersetzen Sie die folgenden Variablen:

    • OPENSEARCH_FD_TABLE: der Name der externen Datentabelle, die Ihre OpenSearch-Tabelle darstellt. Beispiel: my-fd-opensearch-table.

    • OPENSEARCH_FIELDS: eine durch Kommas getrennte Liste, in der jeder Eintrag das Format opensearch_field_name PG_DATA_TYPE hat. Eine Liste der unterstützten OpenSearch-Datentypen und der entsprechenden PostgreSQL-Typen finden Sie unter Unterstützte Datentypen.

    • OPENSEARCH_INDEX_NAME: der Name Ihres OpenSearch-Index. Beispiel: my-opensearch-index.

OpenSearch-Daten abfragen

AlloyDB Omni konvertiert SQL-Abfragen in OpenSearch REST API-Abfragen.

Standard-SQL-Abfragen

Sie können Standard-SQL mit Lucene-Syntax für den Suchausdruck verwenden.

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

Ersetzen Sie die folgenden Variablen:

  • OPENSEARCH_FD_TABLE: Name der externen Datentabelle, die Ihre OpenSearch-Tabelle darstellt. Beispiel: my-fd-opensearch-table.

  • FILTER: (Optional) Filter, der auf Ihre OpenSearch-Abfrage angewendet werden soll. Beispiel: a = 10 AND b < 105.

  • QUERY: Abfrage, die an OpenSearch gesendet werden soll. Beispiel: body:database.

Abfrage-DSL

Für erweiterte Anwendungsfälle können Sie die JSON-basierte Query Domain Specific Language (DSL) von OpenSearch verwenden.

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;

Ersetzen Sie OPENSEARCH_FD_TABLE durch den Namen der externen Datentabelle, die Ihre OpenSearch-Tabelle darstellt. Beispiel: my-fd-opensearch-table.

Wenn Sie eine hybride Suche in Ihren OpenSearch-Daten durchführen möchten, verknüpfen Sie die OpenSearch-Token-Suchergebnisse mit den AlloyDB Omni-Vektorsuchergebnissen.

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;

Ersetzen Sie die folgenden Variablen:

  • LIMIT: Anzahl der zurückzugebenden Ergebnisse. Beispiel: 10.

  • WEIGHT: Beitrag dieses Sucheintrags zur gesamten Reciprocal Rank Fusion (RRF). Beispiel: 0.5 Wenn Sie keine Gewichtungen angeben, werden sie gleichmäßig verteilt. Weitere Informationen finden Sie unter Parameter für die hybride Suchfunktion.

  • OPENSEARCH_FD_TABLE: Name der externen Datentabelle, die Ihre OpenSearch-Tabelle darstellt. Beispiel: my-fd-opensearch-table.

  • QUERY: Abfrage, die an OpenSearch gesendet werden soll. Beispiel: body:database.

Fehlerbehebung

Wenn beim Abfragen Ihres OpenSearch-Clusters Authentifizierungs- oder Verbindungsprobleme auftreten, prüfen Sie Folgendes:

  • HTTP-Authentifizierungsfehler 401 oder 403: Prüfen Sie, ob Ihr OpenSearch-Secret in Secret Manager einen String im Format username:password enthält und ob Ihr Dienstkonto die Berechtigung secretmanager.secretAccessor hat.

  • Verbindungszeitüberschreitungen: Prüfen Sie die Netzwerkregeln und die Firewallkonfiguration zwischen AlloyDB Omni und Ihrem OpenSearch-Endpunkt.

Beschränkungen

  • Lesezugriff: AlloyDB Omni liest OpenSearch-Daten, schreibt aber nicht in diese.

  • Datenverwaltung: AlloyDB Omni indexiert Ihre Datenbankdaten nicht automatisch in OpenSearch. Sie sind dafür verantwortlich, Ihre OpenSearch-Indizes zu füllen und die Konsistenz zwischen den Daten in AlloyDB Omni und den indexierten Daten in OpenSearch zu wahren.

  • Schemaverwaltung: AlloyDB Omni synchronisiert Schemas nicht automatisch mit OpenSearch. Wenn sich das OpenSearch-Indexschema ändert, müssen Sie das Schema der entsprechenden PostgreSQL-Fremdtabelle manuell aktualisieren.

  • Nicht unterstützte Typen: Spezielle OpenSearch-Typen wie Geodaten-Typen werden nicht unterstützt.

  • Authentifizierung: Sie müssen die in Ihrem OpenSearch-Cluster konfigurierte Basisauthentifizierung (Nutzername und Passwort) verwenden.

Nächste Schritte