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 esempiodoc.sub.path[@index].key IS NOT NULL
).
- Esprimere il contenimento JSON nello schema utilizzando la funzione
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.
- Esprimere il contenimento JSONB utilizzando gli operatori
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
- Scopri di più su tokenizzazione e analizzatori di token.
- Scopri di più sugli indici di ricerca.
- Scopri di più sull'indicizzazione dei dati JSON.
- Scopri di più sull'indicizzazione dei dati JSONB.