Además de indexar texto, el índice de búsqueda proporciona una forma eficiente de indexar números. Se usa principalmente para aumentar las consultas de búsqueda de texto completo con condiciones en campos numéricos. En esta página se describe la indexación de números para consultas de igualdad y desigualdad, así como la indexación de una matriz de números.
Tokenizar números
Los tokenizadores de números se usan para generar un conjunto de tokens que se utilizan para acelerar las búsquedas de comparación numérica.
Usa la función
TOKENIZE_NUMBER
para crear un índice numérico. TOKENIZE_NUMBER
admite INT64
,
FLOAT32
, FLOAT64
o ARRAY
de estos tipos.
En PostgreSQL, usa la función
spanner.tokenize_number
para crear un índice numérico. spanner.tokenize_number
solo admite el tipo bigint
.
Números de índice para consultas de igualdad y desigualdad
Spanner admite la indexación de números para igualdad y desigualdad.
Las búsquedas de igualdad coinciden con un número. Las búsquedas por intervalo y desigualdad coinciden con un número
dentro de un intervalo específico. Este valor se define en el parámetro
TOKENIZE_NUMBER
comparison_type
:
- Igualdad:
comparison_type=>"equality"
- Desigualdad e igualdad:
comparison_type=>"all"
En ambos casos, el número original (ya sea entero o de coma flotante) se somete a un proceso de tokenización, que es conceptualmente similar a la tokenización de texto completo. Genera un conjunto de tokens que la consulta puede usar para localizar documentos que coincidan con la condición numérica.
La indexación de igualdad solo genera un token, que representa el número. Este modo se recomienda si las consultas solo tienen condiciones con el formato field = @p
en la cláusula WHERE
.
La indexación de desigualdades e igualdades puede acelerar una gama más amplia de condiciones en la cláusula WHERE
de la consulta. Esto incluye field < @p
, field <= @p
, field > @p
, field >= @p
, field BETWEEN @p1 and @p2
y field <> @p
, además de las condiciones de igualdad. Para implementar este tipo de indexación, Spanner genera tokens en el índice de búsqueda subyacente.
Spanner puede generar muchos tokens para cada número indexado, en función de los parámetros de ajuste. El número de tokens depende de los parámetros que se definan para TOKENIZE_NUMBER
, como algorithm
, min
, max
y granularity
. Por lo tanto, es importante evaluar los parámetros de ajuste con detenimiento para asegurar un equilibrio adecuado entre el almacenamiento en disco y el tiempo de búsqueda.
Tokenización de matrices
Además de los valores escalares, TOKENIZE_NUMBER
admite la tokenización de un array de números.
Cuando se usa TOKENIZE_NUMBER
con la columna ARRAY
, debe especificar comparison_type=>"equality"
. Las consultas de intervalo no se admiten con una
matriz de números.
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 siguiente consulta busca todos los álbumes que tengan una valoración de 1 o 2:
SELECT AlbumId
FROM Albums
WHERE ARRAY_INCLUDES_ANY(Ratings, [1, 2])
La siguiente consulta busca todos los álbumes que se han calificado con 1 y con 5:
SELECT AlbumId
FROM Albums
WHERE ARRAY_INCLUDES_ALL(Ratings, [1, 5])
Siguientes pasos
- Consulta información sobre la tokenización y los tokenizadores de Spanner.
- Consulta información sobre los índices de búsqueda.
- Consulta información sobre la partición de índices.