Indici di ricerca JSON

Oltre a indicizzare il testo, l'indice di ricerca di Spanner offre un modo efficiente per indicizzare e eseguire query sui documenti JSON e JSONB. Utilizza gli indici di ricerca per query JSON e JSONB autonome o per integrare altre query di ricerca full-text.

Per ulteriori informazioni, consulta Indicizzare i dati JSON e Indicizzare i dati JSONB.

Tokenizza JSON e JSONB

Puoi utilizzare la funzione TOKENIZE_JSON per creare un indice JSON in GoogleSQL o la funzione TOKENIZE_JSONB per creare un indice JSONB in PostgreSQL. Per maggiori dettagli, vedi TOKENIZE_JSON e TOKENIZE_JSONB.

Query JSON e JSONB

Puoi utilizzare un indice di ricerca per accelerare le query che includono condizioni di contenimento JSON ed esistenza di chiavi. Il contenimento JSON determina se un documento JSON è contenuto in un altro. L'esistenza della chiave determina se una chiave esiste nello schema del database.

  • In GoogleSQL:

    • Esprimere il contenimento JSON nello schema utilizzando la funzione JSON_CONTAINS.
    • Costruisci condizioni di esistenza della chiave utilizzando l'accesso ai campi, gli operatori di indice di array e IS NOT NULL. Gli operatori di accesso ai campi e di indice dell'array descrive un percorso del documento JSON. IS NOT NULL verifica l'esistenza di questo percorso (ad esempio doc.sub.path[@index].key IS NOT NULL).
  • In PostgreSQL:

    • Esprimere il contenimento JSONB utilizzando gli operatori @> e <@. Per ulteriori informazioni, consulta gli operatori JSONB.
    • Costruisci condizioni di esistenza della chiave utilizzando gli operatori ?, ?| e ?&. Per ulteriori informazioni, consulta gli operatori JSONB.

Nelle query, puoi includere più condizioni JSON di qualsiasi tipo nell'indice di ricerca. Puoi anche includere le condizioni JSON in una combinazione logica utilizzando AND, OR e NOT.

Controllare l'utilizzo dell'indice della Ricerca

Per verificare che la query utilizzi un indice di ricerca, cerca un Scansione dell'indice di ricerca nel piano di esecuzione della query.

Limitazioni

  • Gli indici di ricerca, inclusi gli indici di ricerca JSON e JSONB, vengono utilizzati solo nelle transazioni di sola lettura. Spanner potrebbe utilizzare indici secondari pertinenti in una transazione di lettura-scrittura. Se tenti di forzare l'utilizzo di un indice di ricerca in una transazione di lettura/scrittura, si verifica il seguente errore:ERROR: spanner: code = "InvalidArgument", desc = "The search index AlbumsIndex cannot be used in transactional queries by default."
  • I tentativi di archiviare determinati documenti JSON di grandi dimensioni o molto complessi in un indice di ricerca potrebbero restituire un errore too many search token bytes. Le dimensioni del token di output di questo documento JSON devono essere inferiori a 10 MB. Se non hai bisogno che l'intero documento sia disponibile per la ricerca, valuta la possibilità di estrarre un sottoinsieme più piccolo del documento (ad esempio utilizzando una colonna generata) e di eseguire la ricerca all'interno della colonna.

Passaggi successivi