Accedere ai dati di Solr da AlloyDB per PostgreSQL

Puoi accedere ai dati archiviati in Apache Solr ed eseguirne la ricerca utilizzando l'integrazione della ricerca esterna in AlloyDB Omni.

Limitazioni

Prima di connettere AlloyDB a Solr, tieni presenti le seguenti limitazioni:

  • L'integrazione di Solr è disponibile solo nella versione principale di PostgreSQL 17 e successive.

  • AlloyDB legge i dati di Solr, ma non li scrive.

  • AlloyDB non indicizza automaticamente i dati del database in Solr. Sei responsabile del riempimento delle 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 di tipo JSON predefiniti. Devi mappare i campi di tipo JSON a stringhe formattate come TEXT o jsonb.

  • 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 ordini di ordinamento, ad esempio myid0 ASC, myid1 DESC, utilizzando l'opzione unique_key_sort_suffix quando crei la tabella esterna.

Prima di iniziare

Prima di iniziare, assicurati di aver completato le seguenti operazioni:

  • Aggiungi la connettività IP pubblico in uscita all'istanza AlloyDB principale.

  • Esegui il deployment e l'esecuzione del cluster Solr con un URL pubblico accessibile.

  • Archivia le credenziali Solr in Secret Manager. Per l'autenticazione di base, il valore del secret deve essere una stringa con codifica Base64 nel formato username:password.

  • Assicurati che il account di servizio utilizzato da AlloyDB disponga dell'autorizzazione secretmanager.secretAccessor per leggere il secret da Secret Manager.

Abilitare e configurare l'estensione external_search_fdw

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

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: 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: percorso di Secret Manager per le credenziali di autenticazione Solr. Ad esempio, projects/123456789012/secrets/apikey/versions/1. 123456789012 rappresenta l'ID progetto. Google Cloud

  1. Definisci la mappatura degli utenti PostgreSQL per il server Solr. Tieni presente che le 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;
    
  2. 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 nuove variabili:

    • SOLR_FD_TABLE: 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 della chiave univoca 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 mappare. Ecco alcuni esempi comuni:

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

Eseguire query sui dati Solr

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

Per eseguire query sui dati Solr, hai 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: 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 la query DSL in stile JSON di Solr Query DSL.

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 dati Solr, unisci i risultati della ricerca di token Solr con i risultati della ricerca vettoriale 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: 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.

  • SOLR_FD_TABLE: 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 "database cloud" nel campo solr_field_name.