Índices de búsqueda numéricos

Además de indexar texto, el índice de búsqueda proporciona una forma eficiente de indexar números. Se usa principalmente para aumentar búsqueda en el 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.

Asignar 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 Parámetro TOKENIZE_NUMBER comparison_type:

  • 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 tokenización, que es conceptualmente similar a la tokenización 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 una gama más amplia de condiciones 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 in 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, dependiendo de 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 asignación de token 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(Grades_Tokens);

La siguiente consulta encuentra todos los álbumes que tienen una calificación de 1 o 2:

SELECT AlbumId
FROM Albums
WHERE ARRAY_CONTAINS_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_CONTAINS_ALL(Ratings, [1, 5])

¿Qué sigue?