Índices de pesquisa numéricos

Além de indexar texto, o índice de pesquisa oferece uma forma eficiente de indexar números. É usado principalmente para aumentar as consultas de pesquisa de texto completo com condições em campos numéricos. Esta página descreve os números de indexação para consultas de igualdade e desigualdade, e a indexação de uma matriz de números.

Converta números em tokens

Os tokenizadores de números são usados para gerar um conjunto de tokens que são usados para acelerar as pesquisas de comparação numérica.

Use a função TOKENIZE_NUMBER para criar um índice numérico. O TOKENIZE_NUMBER suporta INT64, FLOAT32, FLOAT64 ou ARRAY destes tipos.

Para o PostgreSQL, use a função spanner.tokenize_number para criar um índice numérico. spanner.tokenize_number só suporta o tipo bigint.

Números de índice para consultas de igualdade e desigualdade

O Spanner suporta a indexação de números para igualdade e desigualdade. As pesquisas de igualdade correspondem a um número. As pesquisas de intervalo e desigualdade correspondem a um número dentro de um intervalo específico. Define este valor no parâmetro TOKENIZE_NUMBER comparison_type:

  • Igualdade: comparison_type=>"equality"
  • Desigualdade e igualdade: comparison_type=>"all"

Em ambos os casos, o número original (inteiro ou de vírgula flutuante) é submetido a um processo de tokenização, que é conceptualmente semelhante à tokenização de texto completo. Produz um conjunto de tokens que a consulta pode usar para localizar documentos que correspondam à condição de número.

A indexação de igualdade produz apenas um token, que representa o número. Este modo é recomendado se as consultas tiverem apenas condições sob a forma de field = @p na cláusula WHERE.

A indexação de desigualdades e igualdades pode acelerar uma gama mais ampla de condições na cláusula WHERE da consulta. Isto inclui field < @p, field <= @p, field > @p, field >= @p, field BETWEEN @p1 and @p2 e field <> @p, além das condições de igualdade. Para implementar este tipo de indexação, o Spanner produz tokens no índice de pesquisa subjacente. O Spanner pode produzir muitos tokens para cada número indexado, dependendo dos parâmetros de otimização. O número de tokens depende dos parâmetros definidos para TOKENIZE_NUMBER, como algorithm, min, max e granularity. Por conseguinte, é importante avaliar cuidadosamente os parâmetros de otimização para garantir um equilíbrio adequado entre o armazenamento em disco e o tempo de procura.

Conversão em tokens de matrizes

Além dos valores escalares, a função TOKENIZE_NUMBER suporta a tokenização de uma matriz de números.

Quando TOKENIZE_NUMBER é usado com a coluna ARRAY, tem de especificar comparison_type=>"equality". As consultas de intervalo não são suportadas com uma 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);

A seguinte consulta encontra todos os álbuns com uma classificação de 1 ou 2:

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

A seguinte consulta encontra todos os álbuns que foram classificados com 1 e 5:

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

O que se segue?