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
- Saiba mais sobre tokenização e tokenizadores do Spanner.
- Saiba mais sobre índices de pesquisa.
- Saiba mais sobre a partição de índices.