Accedere ai dati di Apache Solr da AlloyDB Omni

Seleziona una versione della documentazione:

Puoi accedere ai dati archiviati in Apache Solr ed eseguirne la ricerca utilizzando l'integrazione della ricerca esterna in AlloyDB Omni. Questa integrazione ti consente di trasferire i carichi di lavoro intensivi di ricerca a testo intero, analisi di query complesse e sfaccettature avanzate dal tuo database operativo a Solr, migliorando la latenza delle query e il throughput complessivo del sistema.

Prima di iniziare

Prima di iniziare, completa le seguenti operazioni:

Archivia le credenziali di Solr in Secret Manager

AlloyDB Omni archivia e legge le credenziali di Solr da Secret Manager. Per l'autenticazione HTTP 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 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ù, vedi Gestire l'accesso ai secret.

Attivare e configurare l'estensione external_search_fdw

Per iniziare l'integrazione con Solr, configura l'accesso al cluster Solr tramite un server di dati esterni.

  1. Connettiti al tuo database e attiva l'estensione:

    CREATE EXTENSION external_search_fdw;
    
  2. Crea un server esterno:

    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 esterni. Ad esempio, solr.

    • SOLR_SERVER_HOST_PORT: URL pubblico del cluster Solr. Ad esempio, https://node1.solr.test.com:8983.

    • AUTH_METHOD: tipo di autenticazione da utilizzare. Ad esempio, Basic.

    • SECRET_PATH: il percorso di Secret Manager per le credenziali di autenticazione Solr. Ad esempio, projects/PROJECT_ID/secrets/apikey/versions/1.

  3. Definisci la mappatura degli utenti per il server Solr:

    CREATE USER MAPPING FOR CURRENT_USER
    SERVER SOLR_SERVER_NAME;
    
  4. Mappa lo schema della 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 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 formato solr_field_name PG_DATA_TYPE. Per un elenco dei tipi di dati Solr supportati e dei tipi PostgreSQL corrispondenti, vedi Tipi di dati supportati.

    • UNIQUE_KEY_SORT_SUFFIX: (facoltativo) il campo chiave univoco in Solr o un elenco separato da virgole di più campi con i relativi ordini di ordinamento, ad esempio myid0 ASC, myid1 DESC, utilizzato per la paginazione. Il valore predefinito è id.

    • PG_DATA_TYPE: il tipo PostgreSQL a cui vuoi eseguirne il mapping. Ad esempio:

      • TEXT per i dati stringa.
      • INTEGER per i dati numerici.
    • SOLR_COLLECTION_NAME: il nome della raccolta Solr. Ad esempio, my-solr-collection.

Eseguire query sui dati Solr

AlloyDB Omni converte le query SQL in query dell'API REST di Solr.

Query SQL standard

Per l'espressione di ricerca, puoi utilizzare SQL standard con la sintassi Lucene.

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.

  • FILTER: (Facoltativo) 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, come l'implementazione di query nidificate, l'ordinamento personalizzato o il filtraggio complesso, utilizza il Query DSL 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 tabella Solr. Ad esempio: my-fd-solr-table.

Per eseguire una ricerca ibrida sui tuoi dati Solr, unisci i risultati della ricerca di token Solr con i risultati della ricerca vettoriale di AlloyDB Omni.

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: contributo di questa voce di ricerca alla Reciprocal Rank Fusion (RRF) complessiva. Ad esempio, 0.5. Se non fornisci i pesi, questi vengono distribuiti in modo uniforme. Per ulteriori informazioni, consulta Parametri della funzione di ricerca ibrida.

  • 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, body:database.

Risoluzione dei problemi

Se riscontri problemi di autenticazione o connettività durante l'esecuzione di query sul cluster Solr, controlla quanto segue:

  • Errori di autenticazione HTTP 401 o 403: verifica che il secret Solr in Secret Manager contenga una stringa con codifica base64 nel formato username:password e che iaccount di serviziont utilizzato da AlloyDB Omni disponga dell'autorizzazione secretmanager.secretAccessor.
  • Timeout di connessione: verifica le regole di rete e la configurazione del firewall tra AlloyDB Omni e l'endpoint Solr.

Limitazioni

  • Sola lettura: AlloyDB Omni legge i dati di Solr, ma non li scrive.
  • Gestione dei dati: AlloyDB Omni non indicizza automaticamente i dati del database in Solr. Sei responsabile del popolamento delle raccolte Solr e del mantenimento della coerenza tra i dati in AlloyDB Omni e i dati indicizzati in Solr.
  • Gestione dello schema: AlloyDB Omni non sincronizza automaticamente gli schemi con Solr. Se lo schema della raccolta Solr cambia, aggiorna manualmente lo schema della tabella esterna PostgreSQL corrispondente.
  • Tipi non supportati: i tipi Solr specializzati, come i tipi geospaziali, non sono supportati.
  • Ordinamento stabile: affinché la paginazione funzioni correttamente, Solr richiede una chiave univoca nell'espressione di ordinamento. Per impostazione predefinita, viene utilizzato il campo id. Per specificare un campo personalizzato o un elenco separato da virgole di più campi insieme ai relativi ordini di ordinamento individuali, utilizza l'opzione unique_key_sort_suffix quando crei la tabella esterna. Ad esempio, specifica myid0 ASC, myid1 DESC.

Passaggi successivi