Puoi accedere ai dati archiviati in OpenSearch ed eseguire ricerche utilizzando l'integrazione della ricerca esterna in AlloyDB. Questa integrazione ti consente di unire gli indici OpenSearch alle tabelle relazionali in AlloyDB senza spostare o copiare i dati.
Prima di iniziare
Prima di iniziare, assicurati di aver completato quanto segue:
Abilita la connettività in uscita sull'istanza AlloyDB principale.
Crea e configura OpenSearch con un endpoint pubblico accessibile.
Attiva il plug-in di sicurezza sul tuo cluster OpenSearch e crea un utente con autorizzazione di sola lettura nel database degli utenti interni. AlloyDB utilizza queste credenziali per accedere al tuo cluster OpenSearch.
Archivia le credenziali OpenSearch in Secret Manager
AlloyDB archivia e legge le tue credenziali OpenSearch da Secret Manager. Per saperne di più su come utilizzare Secret Manager, consulta Crea e accedi a un secret utilizzando Secret Manager.
Assicurati che il account di servizio AlloyDB disponga del ruolo Secret Manager Secret Accessor (roles/secretmanager.secretAccessor) per leggere il secret da Secret Manager. Per saperne di più, consulta Crea e accedi a un secret utilizzando Secret Manager.
Attiva e configura l'estensione external_search_fdw
Per avviare l'integrazione con OpenSearch, configura l'accesso al tuo cluster OpenSearch tramite un server di dati esterno.
Attiva l'estensione
external_search_fdw.CREATE EXTENSION external_search_fdw;Crea un server per il tuo cluster OpenSearch.
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 'Basic', secret_path 'SECRET_PATH' );Sostituisci le seguenti variabili:
OPENSEARCH_SERVER_NAME: il nome del server di dati esterno. Ad esempio,opensearch.OPENSEARCH_SERVER_HOST_PORT: l'URL pubblico (endpoint) del tuo cluster OpenSearch.SECRET_PATH: il percorso di Secret Manager per le tue credenziali di autenticazione OpenSearch. Ad esempio,projects/123456789012/secrets/opensearch-credentials/versions/1.123456789012rappresenta l'ID progetto Google Cloud .
Definisci la mappatura degli utenti PostgreSQL per il server OpenSearch. Tieni presente che i wrapper di dati esterni (FDW) di PostgreSQL richiedono questa mappatura degli utenti per funzionare. AlloyDB esegue l'autenticazione utilizzando l'intestazione di autorizzazione REST.
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 nuove 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 utilizza il formatoopensearch_field_name PG_DATA_TYPE. Per un elenco dei tipi di dati OpenSearch supportati e dei relativi tipi PostgreSQL, consulta Tipi di dati supportati.OPENSEARCH_INDEX_NAME: il nome dell'indice OpenSearch. Ad esempio,my-opensearch-index.
Tipi di dati supportati
AlloyDB supporta i seguenti tipi di dati OpenSearch:
| Tipi di dati | Tipo AlloyDB |
|---|---|
alias
|
Tipo PostgreSQL per il campo a cui fa riferimento alias
|
binary
|
bytea
|
boolean
|
BOOLEAN
|
|
|
SMALLINT
|
date
|
TIMESTAMPTZ
|
DOUBLE PRECISION
|
|
REAL
|
|
integer
|
INTEGER
|
long
|
BIGINT
|
jsonb
|
|
|
|
TEXT
|
unsigned_long
|
NUMERIC
|
Esegui query sui dati OpenSearch
AlloyDB prende le query SQL e le converte in query API REST OpenSearch.
Per eseguire query sui dati OpenSearch, hai le seguenti opzioni:
- Query SQL standard
- Query DSL
- Ricerche ibride
Query SQL standard
Per l'espressione di ricerca puoi utilizzare SQL standard con la sintassi Lucene.
SELECT id, body
FROM OPENSEARCH_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';
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.(Facoltativo)
FILTER: il filtro da applicare alla query OpenSearch. Ad esempio,a = 10 AND b < 105.QUERY: la query da inviare a OpenSearch. Ad esempio,body:database.
Query DSL
Per casi d'uso avanzati, utilizza il linguaggio DSL di 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 OpenSearch, unisci i risultati di ricerca di token OpenSearch ai risultati di Vector Search di AlloyDB.
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: il 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.OPENSEARCH_FD_TABLE: il 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,"opensearch_field_name:\"cloud databases\""cerca la frase "cloud databases" nel campoopensearch_field_name.
Esempi di pushdown
Per rendere le query più efficienti, AlloyDB tenta di eseguire il push dei seguenti aspetti della query direttamente nella chiamata API effettuata a OpenSearch:
SELECTcampiWHEREfiltriORDER BYordinamentoLIMIT
Per esempi di query che illustrano quali aspetti AlloyDB è in grado di eseguire in pushdown e quali no, consulta la tabella seguente.
| Tipo di query | Esempio di query | Elementi della query spostati verso il basso |
|---|---|---|
| Query non filtrate |
SELECT id, body FROM opensearch_table ORDER BY metadata <@> 'body:foo' DESC LIMIT 10; |
|
| Corrispondenza esatta del testo |
SELECT id, body FROM opensearch_table WHERE body = 'foo' LIMIT 10; |
|
| Espressioni a campo singolo |
SELECT id, body FROM opensearch_table WHERE id > 10 ORDER BY metadata <@> 'body:foo' LIMIT 10; |
|
| Espressioni costanti |
SELECT id, body FROM opensearch_table WHERE id > (1+1) LIMIT 10; |
|
| Espressioni con funzioni |
SELECT id, body FROM opensearch_table WHERE id > CEIL(3.14) LIMIT 10; |
|
| Espressioni con più campi |
SELECT id, body FROM opensearch_table WHERE dbl_field < flt_field LIMIT 10; |
|
| Filtro dei punteggi |
SELECT id, body, (metadata <@> 'body:bar') AS score FROM opensearch_table WHERE score > 0.5 ORDER by score desc LIMIT 10; |
|
LIKE e operatori simili |
SELECT id, body FROM opensearch_table WHERE id > 10 AND body LIKE '%foo%' LIMIT 10; |
|
| Query non elaborate |
SELECT id, body FROM opensearch_table WHERE id < 10 ORDER BY metadata <@> $${"query": { "match_all": {}}}$$ DESC LIMIT 10; |
|
Risoluzione dei problemi
Se riscontri problemi di autenticazione o connettività durante l'esecuzione di query sul cluster OpenSearch, controlla le seguenti cause comuni:
- Errori di autenticazione HTTP 401 o 403: verifica che il secret OpenSearch in Secret Manager contenga una stringa formattata come
username:passworde che il tuo account di servizio AlloyDB disponga del ruolo Secret Manager Secret Accessor (roles/secretmanager.secretAccessor). - Timeout della connessione: verifica che la connettività IP pubblico in uscita sia abilitata nell'istanza AlloyDB principale e che il firewall OpenSearch consenta le connessioni in entrata sulla porta specificata.
Limitazioni
Prima di connettere AlloyDB a OpenSearch, tieni presente le seguenti limitazioni:
L'integrazione di OpenSearch è disponibile solo su PostgreSQL versione principale
17e successive.AlloyDB legge i dati di OpenSearch, ma non li scrive.
AlloyDB non indicizza automaticamente i dati del database in OpenSearch. Sei responsabile della compilazione degli indici OpenSearch e del mantenimento della coerenza tra i dati in AlloyDB e i dati indicizzati in OpenSearch.
AlloyDB non sincronizza automaticamente gli schemi con OpenSearch. Se lo schema dell'indice OpenSearch cambia, devi aggiornare manualmente lo schema della tabella esterna PostgreSQL corrispondente.
I tipi OpenSearch specializzati, come
geo_pointnon sono supportati. Per l'elenco completo dei tipi di dati supportati, consulta Tipi di dati supportati.Devi utilizzare l'autenticazione di base (nome utente e password) configurata nel tuo 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.