Oltre a indicizzare il testo, l'indice della Ricerca di Spanner search index fornisce un modo efficiente per indicizzare ed eseguire query su documenti JSON e JSONB. Utilizza gli indici della Ricerca per query JSON e JSONB autonome o per aumentare altre query di ricerca full-text.
Per saperne di più, consulta Indicizzare i dati JSON e Indicizzare i dati JSONB.
Tokenizzare 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 i dettagli, consulta TOKENIZE_JSON
e TOKENIZE_JSONB.
Query JSON e JSONB
Puoi utilizzare un indice della Ricerca per accelerare le query che includono confronti di uguaglianza, contenimento JSON ed esistenza di chiavi condizioni:
- I confronti di uguaglianza determinano se un documento JSON o un sottopercorso all'interno di un documento JSON è uguale a un valore di destinazione.
- Il contenimento JSON determina se un documento JSON è contenuto in un altro.
- L'esistenza di chiavi determina se una chiave o un percorso esiste in un documento JSON.
Puoi esprimere queste condizioni in ogni dialetto come segue:
In GoogleSQL:
- Costruisci predicati di uguaglianza utilizzando gli operatori
=,!=,<>,IN, eNOT INsu una colonnaJSONindicizzata o su un sottopercorso estratto con gli operatori di accesso ai campi e di indice. Ad esempio,doc = JSON '{"a": 1}',doc.sub.path[0].key = "value"odoc.status IN ("active", "pending"). Altri operatori di confronto come<,<=,>, e>=non vengono accelerati dagli indici della Ricerca JSON. - Esprimi il contenimento JSON nello schema utilizzando la
JSON_CONTAINSfunzione. - Costruisci condizioni di esistenza delle chiavi utilizzando gli operatori di accesso ai campi, di indice degli array e
IS NOT NULL. Gli operatori di accesso ai campi e di indice degli array descrivono un percorso del documento JSON.IS NOT NULLverifica l'esistenza di questo percorso (ad esempio,doc.sub.path[@index].key IS NOT NULL).
- Costruisci predicati di uguaglianza utilizzando gli operatori
In PostgreSQL:
- Costruisci predicati di uguaglianza utilizzando gli
=,!=,<>,IN, eNOT INoperatori su una colonnaJSONBindicizzata o su un sottopercorso estratto con l'->operatore. Ad esempio,doc = '{"a": 1}'::jsonb,doc->'sub'->0->'key' = '"value"'::jsonb, odoc->'status' IN ('"active"'::jsonb, '"pending"'::jsonb). Altri operatori di confronto come<,<=,>, e>=, nonché i predicati di estrazione del testo che utilizzano->>, non vengono accelerati dagli indici di ricerca JSONB. - Esprimi il contenimento JSONB utilizzando gli operatori
@>e<@. Per saperne di più, consulta Operatori JSONB. - Costruisci condizioni di esistenza delle chiavi utilizzando gli operatori
?,?|e?&. Per saperne di più, consulta Operatori JSONB.
- Costruisci predicati di uguaglianza utilizzando gli
Nelle query puoi includere più condizioni JSON di qualsiasi tipo nell'indice della 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 della Ricerca, cerca un Scansione dell'indice della Ricerca nodo nel piano di esecuzione della query.
Limitazioni
- Gli indici della Ricerca, inclusi gli indici della Ricerca JSON e JSONB, vengono utilizzati solo nelle transazioni di sola lettura. Spanner potrebbe utilizzare gli indici secondari pertinenti in una transazione di lettura-scrittura. Se tenti di forzare l'utilizzo di un
indice della 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 della 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 ricercabile, valuta la possibilità di estrarre un sottoinsieme più piccolo del documento (ad esempio, utilizzando una colonna generata) ed eseguire la ricerca nella colonna.
Passaggi successivi
- Scopri di più sulla tokenizzazione e sui tokenizer.
- Scopri di più sugli indici di ricerca.
- Scopri di più sull'indicizzazione dei dati JSON.
- Scopri di più sull'indicizzazione dei dati JSONB.