Puoi accedere ai dati archiviati in Apache Solr ed eseguirne ricerche utilizzando l'integrazione della ricerca esterna in AlloyDB per PostgreSQL.
Prima di iniziare
Prima di iniziare, assicurati di aver completato quanto segue:
Aggiungi la connettività IP pubblico in uscita sulla tua istanza AlloyDB principale.
Esegui il deployment e l'esecuzione del cluster Solr con un URL pubblico accessibile.
Archivia le credenziali Solr in Secret Manager
AlloyDB archivia e legge le tue credenziali Solr da Secret Manager. Per l'autenticazione di base, il valore del secret in Secret Manager deve essere una stringa con codifica Base64 nel formato username:password. Per saperne di più su come utilizzare Secret Manager, consulta Crea e accedi a un secret utilizzando Secret Manager.
Assicurati che il tuo 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 Solr, configura l'accesso al cluster Solr tramite un server di dati esterno.
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'
);
Sostituisci le seguenti variabili:
SOLR_SERVER_NAME: il nome del server di dati esterno. Ad esempio,solr.SOLR_SERVER_HOST_PORT: URL pubblico del cluster SOLR. Ad esempio,https://node1.solr.test.com:8983.AUTH_METHOD: il tipo di autenticazione da utilizzare. Ad esempio,Basic.SECRET_PATH: il percorso di Secret Manager per le tue credenziali di autenticazione Solr. Ad esempio,projects/123456789012/secrets/apikey/versions/1.123456789012rappresenta l'ID progetto Google Cloud .
Definisci la mappatura degli utenti PostgreSQL per il server Solr. Tieni presente che i FDW 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 SOLR_SERVER_NAME;Mappa lo schema della tua raccolta Solr a una tabella esterna 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' );Sostituisci le seguenti nuove variabili:
SOLR_FD_TABLE: il nome della tabella di dati esterni che rappresenta la tabella Solr. Ad esempio,my-fd-solr-table.SOLR_FIELDS: un elenco separato da virgole in cui ogni voce segue il formatosolr_field_name PG_DATA_TYPE. Per un elenco dei tipi di dati Solr supportati e dei relativi tipi PostgreSQL, consulta Tipi di dati supportati.UNIQUE_KEY_SORT_SUFFIX: (facoltativo) il campo della chiave univoca in Solr o un elenco separato da virgole di più campi con i relativi ordinamenti, ad esempiomyid0 ASC, myid1 DESC, utilizzato per l'impaginazione. Il valore predefinito èid.PG_DATA_TYPE: il tipo PostgreSQL a cui vuoi mappare il tipo Spanner. Esempi più comuni:TEXTper i dati di tipo stringa.INTEGERper i dati numerici.
SOLR_COLLECTION_NAME: il nome della tua raccolta Solr. Ad esempio,my-solr-collection.
Esegui query sui dati Solr
AlloyDB prende le query SQL e le converte in query dell'API REST Solr.
Per eseguire query sui dati Solr, hai a disposizione le seguenti opzioni:
- Query SQL standard
- Query DSL
- Ricerche ibride
Query SQL standard
Puoi utilizzare SQL standard con la sintassi Lucene per l'espressione di ricerca.
SELECT id, body
FROM SOLR_FD_TABLE
WHERE FILTER
ORDER BY metadata <@> 'QUERY';
Sostituisci le seguenti variabili:
SOLR_FD_TABLE: il nome della tabella di dati esterni che rappresenta la tabella Solr. Ad esempio,my-fd-solr-table.(Facoltativo)
FILTER: filtro da applicare alla query Solr. Ad esempio,AND qubits < 105.QUERY: query da inviare a Solr. Ad esempio,body:database.
Query DSL
Per casi d'uso avanzati, utilizza il DSL di query in stile JSON di Solr.
SELECT id, title
FROM SOLR_FD_TABLE
ORDER BY metadata <@> $${
"query": "title:solr",
"filter": ["category:software", "inStock:true"],
"sort": "price desc"
}$$
LIMIT 1;
Sostituisci SOLR_FD_TABLE con il nome della tabella di dati esterni che rappresenta la tua tabella Solr. Ad esempio: my-fd-solr-table.
Ricerche ibride
Per eseguire una ricerca ibrida sui dati Solr, unisci i risultati della ricerca di token Solr ai risultati della ricerca vettoriale di AlloyDB.
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;
Sostituisci le seguenti variabili:
LIMIT: il numero di risultati da restituire. Ad esempio,10.WEIGHT: il contributo di questa voce di ricerca al Reciprocal Rank Fusion (RRF) complessivo. Ad esempio,0.5.SOLR_FD_TABLE: il nome della tabella di dati esterni che rappresenta la tabella Solr. Ad esempio,my-fd-solr-table.QUERY: query da inviare a Solr. Ad esempio,"solr_field_name:\"cloud databases\""cerca la frase "cloud databases" nel camposolr_field_name.
Risoluzione dei problemi
Se riscontri problemi di autenticazione o connettività durante l'esecuzione di query sul tuo cluster Solr, controlla le seguenti cause comuni:
- Errori di autenticazione HTTP 401 o 403: verifica che il secret Solr in Secret Manager contenga una stringa con codifica Base64 nel formato
username:passworde che il account di servizio utilizzato da AlloyDB disponga dell'autorizzazionesecretmanager.secretAccessor. - Timeout della connessione: verifica che la connettività IP pubblica in uscita sia abilitata nell'istanza AlloyDB principale e che il firewall Solr consenta le connessioni in entrata sulla porta specificata.
Limitazioni
Prima di connettere AlloyDB a Solr, tieni presente le seguenti limitazioni:
L'integrazione di Solr è disponibile solo su PostgreSQL versione principale
17e successive.AlloyDB legge, ma non scrive, i dati Solr.
AlloyDB non indicizza automaticamente i dati del database in Solr. Sei responsabile della compilazione delle tue raccolte Solr e del mantenimento della coerenza tra i dati in AlloyDB e i dati indicizzati in Solr.
AlloyDB non sincronizza automaticamente gli schemi con Solr. Se lo schema della raccolta Solr cambia, devi aggiornare manualmente lo schema della tabella esterna PostgreSQL corrispondente.
A differenza di Elasticsearch, Solr non ha campi predefiniti di tipo JSON. Devi mappare i campi di tipo JSON a stringhe formattate come
TEXTojsonb.Solr richiede una chiave univoca nell'espressione di ordinamento per il corretto funzionamento della paginazione. Per impostazione predefinita, viene utilizzato il campo
id. Puoi specificare un campo personalizzato o un elenco separato da virgole di più campi insieme ai relativi ordinamenti individuali, ad esempiomyid0 ASC, myid1 DESC, utilizzando l'opzioneunique_key_sort_suffixquando crei la tabella esterna.
Passaggi successivi
- Scopri come accedere ai dati di OpenSearch.
- Scopri come accedere ai dati di Elasticsearch.
- Scopri come eseguire una ricerca di somiglianza vettoriale ibrida.