Indici di ricerca numerici

Oltre all'indicizzazione del testo, indice di ricerca, che offre 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 i numeri di indicizzazione per l'uguaglianza e disuguaglianze e l'indicizzazione di una matrice di numeri.

Tokenizzare i numeri

Puoi usare la funzione TOKENIZE_NUMBER per creare un indice numerico. Per maggiori dettagli, consulta TOKENIZE_NUMBER.

Indicizza i numeri per le query su 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"
  • Disparità e uguaglianza: 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. Questo è consigliata se le query hanno solo condizioni nel formato 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 in nonché condizioni di uguaglianza. Per implementare questo tipo di indicizzazione, Spanner produce 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 i parametri di ottimizzazione per garantire un equilibrio appropriato tra spazio di archiviazione su disco e tempo di ricerca.

Tokenizzazione array

Oltre ai valori scalari, TOKENIZE_NUMBER supporta la tokenizzazione di una un array di numeri.

Quando TOKENIZE_NUMBER viene utilizzato con la colonna ARRAY, devi specificare comparison_type=>"equality". Le query di intervallo non sono supportate con un 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(Grades_Tokens);

La seguente query trova tutti gli album con una valutazione pari a 1 o 2:

SELECT AlbumId
FROM Albums
WHERE ARRAY_CONTAINS_ANY(Ratings, [1, 2])

La seguente query trova tutti gli album con la valutazione 1 e 5:

SELECT AlbumId
FROM Albums
WHERE ARRAY_CONTAINS_ALL(Ratings, [1, 5])

Passaggi successivi