Sie können mit der externen Suchintegration in AlloyDB Omni auf in OpenSearch gespeicherte Daten zugreifen und darin suchen. Mit dieser Integration können Sie eine föderierte Suche in vorhandenen OpenSearch-Indexen und Ihren relationalen Tabellen durchführen, ohne Daten kopieren oder verschieben zu müssen.
Hinweis
Führen Sie vor Beginn die folgenden Schritte aus:
- Installieren Sie AlloyDB Omni mit Containern.
- Stellen Sie OpenSearch mit einem zugänglichen öffentlichen Endpunkt bereit und konfigurieren Sie es.
- Aktivieren Sie das Sicherheits-Plug-in in Ihrem OpenSearch-Cluster und erstellen Sie einen Nutzer mit Lesezugriff in der internen Nutzerdatenbank. AlloyDB Omni verwendet diese Anmeldedaten, um auf Ihren OpenSearch-Cluster zuzugreifen.
OpenSearch-Anmeldedaten in Secret Manager speichern
AlloyDB Omni speichert Ihre OpenSearch-Anmeldedaten in Secret Manager und liest sie daraus. Für die 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 Dienstkonto, das von AlloyDB Omni verwendet wird, die Berechtigung secretmanager.secretAccessor hat, um das Secret aus Secret Manager zu lesen. Weitere Informationen finden Sie unter
Zugriff auf Secrets verwalten.
Erweiterung external_search_fdw aktivieren und konfigurieren
Konfigurieren Sie den Zugriff auf Ihren OpenSearch-Cluster über einen externen Datenserver, um die Integration mit OpenSearch zu starten.
Stellen Sie eine Verbindung zu Ihrer Datenbank her und aktivieren Sie die Erweiterung:
CREATE EXTENSION external_search_fdw;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: Art der zu verwendenden Authentifizierung. Beispiel:Basic.SECRET_PATH: Secret Manager-Pfad zu Ihren OpenSearch-Anmeldedaten. Beispiel:projects/PROJECT_ID/secrets/opensearch-credentials/versions/1.
Definieren Sie die Nutzerzuordnung für den OpenSearch-Server:
CREATE USER MAPPING FOR CURRENT_USER SERVER OPENSEARCH_SERVER_NAME;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: 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 Formatopensearch_field_name PG_DATA_TYPEhat. Eine Liste der unterstützten OpenSearch-Datentypen und der entsprechenden PostgreSQL-Typen finden Sie unter Unterstützte Datentypen.OPENSEARCH_INDEX_NAME: 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 verwenden Sie die OpenSearch-Abfrage-DSL (Domain Specific Language) im JSON-Stil.
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.
Hybridsuchen
Wenn Sie eine Hybridsuche in Ihren OpenSearch-Daten durchführen möchten, verknüpfen Sie die OpenSearch-Tokensuchergebnisse 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 Suchergebnisses 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 der Hybridsuche.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:passwordenthält und ob Ihr Dienstkonto die Berechtigungsecretmanager.secretAccessorhat. - Verbindungszeitüberschreitungen:Prüfen Sie die Netzwerkregeln und die Firewallkonfiguration zwischen AlloyDB Omni und Ihrem OpenSearch-Endpunkt.
Beschränkungen
- Schreibgeschützt: AlloyDB Omni liest OpenSearch-Daten, schreibt aber nicht in sie.
- Datenverwaltung: AlloyDB Omni indexiert Ihre Datenbankdaten nicht automatisch in OpenSearch. Sie sind dafür verantwortlich, Ihre OpenSearch-Indexe zu füllen und die Konsistenz zwischen den Daten in AlloyDB Omni und den indexierten Daten in OpenSearch aufrechtzuerhalten.
- Schemaverwaltung: AlloyDB Omni synchronisiert Schemas nicht automatisch mit OpenSearch. Wenn sich das Schema Ihres OpenSearch-Index ändert, aktualisieren Sie das Schema der entsprechenden externen PostgreSQL-Tabelle manuell.
- Nicht unterstützte Typen: Spezialisierte OpenSearch-Typen wie geospatiale Typen werden nicht unterstützt.
- Authentifizierung: Sie müssen die Basisauthentifizierung (Nutzername und Passwort) verwenden, die in Ihrem OpenSearch-Cluster konfiguriert ist.
Nächste Schritte
- Erfahren Sie, wie Sie auf Elasticsearch-Daten zugreifen können.
- Erfahren Sie, wie Sie auf Solr-Daten zugreifen.
- Hybride Vektorähnlichkeitssuche ausführen