Í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

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 oferece suporte à 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 em um intervalo específico. Defina esse valor no parâmetro comparison_type TOKENIZE_NUMBER:

  • 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.

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(Ratings_Tokens);

A consulta a seguir encontra todos os álbuns com classificação 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