Índices de pesquisa numérica

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

Tokenizar números

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

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

No PostgreSQL, use a função spanner.tokenize_number para criar um índice numérico. spanner.tokenize_number só oferece suporte ao tipo bigint.

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

O Spanner oferece suporte a números de indexação para igualdade e desigualdade. As pesquisas de igualdade correspondem a um número. As pesquisas de intervalo e desigualdade correspondem a um número em um intervalo específico. Defina esse 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 ponto flutuante) passa por um processo de tokenização, que é conceitualmente semelhante à tokenização de texto completo. Ele produz um conjunto de tokens que a consulta pode usar para localizar documentos que correspondem à condição numérica.

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

O índice de desigualdade e igualdade pode acelerar uma variedade maior de condições na cláusula WHERE da consulta. Isso 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 esse 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 ajuste. O número de tokens depende dos parâmetros definidos para TOKENIZE_NUMBER, como algorithm, min, max e granularity. Portanto, é importante avaliar os parâmetros de ajuste com cuidado para garantir um equilíbrio adequado entre o armazenamento em disco e o tempo de pesquisa.

Tokenização de matriz

Além dos valores escalares, TOKENIZE_NUMBER oferece suporte à tokenização de uma matriz de números.

Quando TOKENIZE_NUMBER é usado com a coluna ARRAY, é necessário especificar comparison_type=>"equality". As consultas de intervalo não são compatíveis 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 consulta a seguir encontra todos os álbuns com uma classificação de 1 ou 2:

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

A consulta a seguir encontra todos os álbuns com nota 1 e 5:

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

A seguir