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