Oltre a indicizzare il testo, l'indice di ricerca fornisce un modo efficiente per indicizzare i numeri. Viene utilizzato principalmente per aumentare le query di ricerca full-text con condizioni sui campi numerici. Questa pagina descrive l'indicizzazione dei numeri per le query di uguaglianza e disuguaglianza e l'indicizzazione di un array di numeri.
Tokenizza i numeri
La funzione TOKENIZE_NUMBER
viene utilizzata per creare un indice numerico. Per maggiori dettagli, consulta TOKENIZE_NUMBER
.
Numeri di indice per query di uguaglianza e disuguaglianza
Spanner supporta l'indicizzazione dei numeri per uguaglianza e diseguaglianza.
Le ricerche di uguaglianza corrispondono a un numero. Le ricerche di intervalli e disuguaglianze corrispondono a un numero
all'interno di un intervallo specifico. Imposta questo valore nel parametro comparison_type
TOKENIZE_NUMBER
:
- Uguaglianza:
comparison_type=>"equality"
- Diseguaglianza ed equità:
comparison_type=>"all"
In entrambi i casi, il numero originale (intero o a virgola mobile) viene sottoposto a un processo di tokenizzazione, concettualmente simile alla tokenizzazione del testo completo. Produce un insieme di token che la query può utilizzare per individuare i documenti corrispondenti alla condizione numerica.
L'indicizzazione di uguaglianza produce un solo token, che rappresenta il numero. Questa modalità è consigliata se le query hanno solo condizioni sotto forma di field = @p
nella clausola WHERE
.
L'indicizzazione di disuguaglianza e uguaglianza può accelerare una gamma più ampia di condizioni nella clausola WHERE
della query. Sono inclusi field < @p
, field <= @p
,
field > @p
, field >= @p
, field BETWEEN @p1 and @p2
e field <> @p
oltre alle condizioni di uguaglianza. Per implementare questo tipo di indicizzazione,
Spanner genera token nell'indice di ricerca sottostante.
Spanner può produrre molti token per ogni numero indicizzato,
a seconda dei parametri di ottimizzazione. Il numero di token dipende dai parametri impostati per TOKENIZE_NUMBER
, ad esempio algorithm
, min
, max
e
granularity
. È quindi importante valutare attentamente i parametri di ottimizzazione per garantire un equilibrio appropriato tra spazio di archiviazione su disco e tempo di ricerca.
Tokenizzazione di array
Oltre ai valori scalari, TOKENIZE_NUMBER
supporta la tokenizzazione di un array di numeri.
Quando TOKENIZE_NUMBER
viene utilizzato con la colonna ARRAY
, devi
specificare comparison_type=>"equality"
. Le query sull'intervallo non sono supportate con un array di numeri.
Ad esempio, considera lo schema seguente:
CREATE TABLE Albums (
AlbumId STRING(MAX) NOT NULL,
Ratings ARRAY<INT64>,
Ratings_Tokens TOKENLIST
AS (TOKENIZE_NUMBER(Ratings, comparison_type=>"equality")) HIDDEN
) PRIMARY KEY(AlbumId);
CREATE SEARCH INDEX AlbumsIndex ON Albums(Ratings_Tokens);
La seguente query trova tutti gli album con una valutazione di 1 o 2:
SELECT AlbumId
FROM Albums
WHERE ARRAY_INCLUDES_ANY(Ratings, [1, 2])
La seguente query trova tutti gli album valutati come 1 e 5:
SELECT AlbumId
FROM Albums
WHERE ARRAY_INCLUDES_ALL(Ratings, [1, 5])
Passaggi successivi
- Scopri di più sulla tokenizzazione e sui tokenizzatori Spanner.
- Scopri di più sugli indici di ricerca.
- Scopri di più sul partizionamento degli indici.