Índices de búsqueda numérica

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