Indici di ricerca numerici

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