Puoi accedere ai dati archiviati in OpenSearch ed eseguirne la ricerca utilizzando l'integrazione della ricerca esterna in AlloyDB Omni. Questa integrazione ti consente di eseguire ricerche federate negli indici OpenSearch esistenti e nelle tabelle relazionali senza copiare o spostare i dati.
Prima di iniziare
Prima di iniziare, completa i seguenti passaggi:
- Installa AlloyDB Omni utilizzando i container.
- Esegui il deployment e configura OpenSearch con un endpoint pubblico accessibile.
- Attiva il plug-in di sicurezza nel cluster OpenSearch e crea un utente con autorizzazione di sola lettura nel database degli utenti interni. AlloyDB Omni utilizza queste credenziali per accedere al cluster OpenSearch.
Archivia le credenziali di OpenSearch in Secret Manager
AlloyDB Omni archivia e legge le credenziali di OpenSearch da Secret Manager. Per l'autenticazione HTTP di base, il valore del secret in Secret Manager deve essere una stringa nel formato username:password. Per saperne di più su come utilizzare
Secret Manager, consulta
Creare e accedere a un secret utilizzando Secret Manager.
Assicurati che il account di servizio utilizzato da AlloyDB Omni disponga dell'autorizzazione secretmanager.secretAccessor per leggere il secret da Secret Manager. Per saperne di più, consulta
Gestire l'accesso ai secret.
Abilita e configura l'estensione external_search_fdw
Per avviare l'integrazione con OpenSearch, configura l'accesso al cluster OpenSearch tramite un server di dati esterni.
Connettiti al database e abilita l'estensione:
CREATE EXTENSION external_search_fdw;Crea un server esterno:
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' );Sostituisci le seguenti variabili:
OPENSEARCH_SERVER_NAME: nome del server di dati esterni. Ad esempio,opensearch.OPENSEARCH_SERVER_HOST_PORT: URL pubblico del cluster OpenSearch. Ad esempio,https://search-my-domain.us-east-1.es.amazonaws.com:443.AUTH_METHOD: tipo di autenticazione da utilizzare. Ad esempio,Basic.SECRET_PATH: percorso di Secret Manager per le credenziali di autenticazione di OpenSearch. Ad esempio,projects/PROJECT_ID/secrets/opensearch-credentials/versions/1.
Definisci il mapping utente per il server OpenSearch:
CREATE USER MAPPING FOR CURRENT_USER SERVER OPENSEARCH_SERVER_NAME;Mappa lo schema dell'indice OpenSearch a una tabella esterna 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' );Sostituisci le seguenti variabili:
OPENSEARCH_FD_TABLE: il nome della tabella di dati esterni che rappresenta la tabella OpenSearch. Ad esempio,my-fd-opensearch-table.OPENSEARCH_FIELDS: un elenco separato da virgole in cui ogni voce segue il formatoopensearch_field_name PG_DATA_TYPE. Per un elenco dei tipi di dati OpenSearch supportati e dei tipi PostgreSQL corrispondenti, consulta Tipi di dati supportati.OPENSEARCH_INDEX_NAME: il nome dell'indice OpenSearch. Ad esempio,my-opensearch-index.
Esegui query sui dati di OpenSearch
AlloyDB Omni converte le query SQL in query dell'API REST di OpenSearch.
Query SQL standard
Puoi utilizzare SQL standard con la sintassi di Lucene per l'espressione di ricerca.
SELECT id, body
FROM OPENSEARCH_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';
Sostituisci le seguenti variabili:
OPENSEARCH_FD_TABLE: nome della tabella di dati esterni che rappresenta la tabella OpenSearch. Ad esempio,my-fd-opensearch-table.FILTER: (facoltativo) filtro da applicare alla query OpenSearch. Ad esempio,a = 10 AND b < 105.QUERY: query da inviare a OpenSearch. Ad esempio,body:database.
Query DSL
Per i casi d'uso avanzati, utilizza il linguaggio specifico del dominio (DSL) delle query in stile JSON di OpenSearch.
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;
Sostituisci OPENSEARCH_FD_TABLE con il nome della tabella di dati esterni che rappresenta la tabella OpenSearch. Ad esempio, my-fd-opensearch-table.
Ricerche ibride
Per eseguire una ricerca ibrida sui dati di OpenSearch, unisci i risultati della ricerca di token di OpenSearch con i risultati della ricerca vettoriale di 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;
Sostituisci le seguenti variabili:
LIMIT: numero di risultati da restituire. Ad esempio,10.WEIGHT: contributo di questa voce di ricerca al Reciprocal Rank Fusion (RRF) complessivo. Ad esempio,0.5. Se non fornisci i pesi, questi vengono distribuiti in modo uniforme. Per saperne di più, consulta Parametri della funzione di ricerca ibrida.OPENSEARCH_FD_TABLE: nome della tabella di dati esterni che rappresenta la tabella OpenSearch. Ad esempio,my-fd-opensearch-table.QUERY: query da inviare a OpenSearch. Ad esempio,body:database.
Risoluzione dei problemi
Se riscontri problemi di autenticazione o connettività durante l'esecuzione di query sul cluster OpenSearch, controlla quanto segue:
- Errori di autenticazione HTTP 401 o 403: verifica che il secret di OpenSearch in Secret Manager contenga una stringa nel formato
username:passworde che il account di servizio disponga dell'autorizzazionesecretmanager.secretAccessor. - Timeout di connessione: verifica le regole di rete e la configurazione del firewall tra AlloyDB Omni e l'endpoint OpenSearch.
Limitazioni
- Sola lettura: AlloyDB Omni legge i dati di OpenSearch, ma non li scrive.
- Gestione dei dati: AlloyDB Omni non indicizza automaticamente i dati del database in OpenSearch. È tua responsabilità popolare gli indici OpenSearch e mantenere la coerenza tra i dati in AlloyDB Omni e i dati indicizzati in OpenSearch.
- Gestione dello schema: AlloyDB Omni non sincronizza automaticamente gli schemi con OpenSearch. Se lo schema dell'indice OpenSearch cambia, aggiorna manualmente lo schema della tabella esterna PostgreSQL corrispondente.
- Tipi non supportati: i tipi OpenSearch specializzati, come i tipi geospaziali, non sono supportati.
- Autenticazione: devi utilizzare l'autenticazione di base (nome utente e password) configurata nel cluster OpenSearch.
Passaggi successivi
- Scopri come accedere ai dati di Elasticsearch.
- Scopri come accedere ai dati di Solr.
- Scopri come eseguire una ricerca di somiglianza vettoriale ibrida.