Í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 consultas de pesquisa de texto completo com em campos numéricos. Esta página descreve os números de indexação para igualdade consultas de desigualdade e de desigualdade e indexar uma matriz de números.

Tokenizar números

Use a função TOKENIZE_NUMBER para criar um índice numérico. Para mais detalhes, consulte TOKENIZE_NUMBER.

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

O Spanner dá suporte a números de indexação para igualdade e desigualdade. As pesquisas com igualdade correspondem a um número. As pesquisas de intervalo e desigualdade correspondem a um número em um intervalo específico. Você define 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. Ela produz um conjunto de tokens que a consulta pode usar para localizar documentos que correspondam à condição do número.

A indexação por 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.

A indexação de desigualdade e igualdade pode acelerar uma gama maior de condições em a 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, de acordo com os parâmetros de ajuste. O número de tokens depende dos parâmetros definidos para TOKENIZE_NUMBER, como algorithm, min, max e granularity. Por isso, é importante avaliar os parâmetros de ajuste com cuidado para garantir um equilíbrio adequado entre armazenamento em disco e 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.

Por exemplo, considere o seguinte 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);

A consulta a seguir localiza todos os álbuns com classificação 1 ou 2:

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

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

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

A seguir