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