Además de indexar texto, el índice de búsqueda proporciona una forma eficiente de indexar números. Se usa principalmente para mejorar 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 las consultas de igualdad y desigualdad, y la indexación de un array de números.
Asigna tokens a números
Usa la función TOKENIZE_NUMBER
para crear un índice numérico. Para obtener más información, consulta TOKENIZE_NUMBER
.
Números de índice para consultas de igualdad y desigualdad
Spanner admite números de indexación para la igualdad y la desigualdad.
Las búsquedas de igualdad coinciden con un número. Las búsquedas de rango y desigualdad coinciden con un número dentro de un rango específico. Estableces este valor en el parámetro comparison_type
TOKENIZE_NUMBER
:
- Igualdad:
comparison_type=>"equality"
- Desigualdad e igualdad:
comparison_type=>"all"
En ambos casos, el número original (entero o de punto flotante) se somete a un proceso de asignación de tokens, que es conceptualmente similar a la asignación de tokens de texto completo. Produce un conjunto de tokens que la consulta puede usar para ubicar documentos que coincidan con la condición numérica.
El indexado de igualdad solo produce un token, que representa el número. Se recomienda este modo si las consultas solo tienen condiciones en forma de field = @p
en la cláusula WHERE
.
La indexación de desigualdad e igualdad puede acelerar un rango más amplio 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 produce tokens en el índice de búsqueda subyacente.
Spanner puede producir muchos tokens para cada número indexado, según los parámetros de ajuste. La cantidad de tokens depende de los parámetros
que se establecen para TOKENIZE_NUMBER
, como algorithm
, min
, max
y
granularity
. Por lo tanto, es importante evaluar los parámetros de ajuste con cuidado para garantizar un equilibrio adecuado entre el almacenamiento en disco y el tiempo de búsqueda.
Asignación de token de array
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
, debes especificar comparison_type=>"equality"
. Las consultas de rango no son compatibles con un array de números.
Por ejemplo, considera el siguiente esquema:
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 encuentra todos los álbumes que tienen una calificación de 1 o 2:
SELECT AlbumId
FROM Albums
WHERE ARRAY_INCLUDES_ANY(Ratings, [1, 2])
La siguiente consulta encuentra todos los álbumes que se calificaron como 1 y como 5:
SELECT AlbumId
FROM Albums
WHERE ARRAY_INCLUDES_ALL(Ratings, [1, 5])
¿Qué sigue?
- Obtén más información sobre la asignación de tokens y los generadores de tokens de Spanner.
- Obtén más información sobre los índices de búsqueda.
- Obtén más información sobre la partición de índices.