Além de indexar texto, o índice de pesquisa do Spanner oferece uma maneira eficiente de indexar e consultar documentos JSON e JSONB. Use índices de pesquisa para consultas JSON e JSONB independentes ou para aumentar outras consultas de pesquisa de texto completo.
Para mais informações, consulte Índice de dados JSON e Índice de dados JSONB.
Tokenizar JSON e JSONB
É possível usar a função TOKENIZE_JSON
para criar um índice JSON no
GoogleSQL ou a função TOKENIZE_JSONB
para criar um índice JSONB no
PostgreSQL. Para mais detalhes, consulte TOKENIZE_JSON
e TOKENIZE_JSONB
.
Consultas JSON e JSONB
É possível usar um índice de pesquisa para acelerar consultas que incluem contenção JSON e condições de existência de chaves. O contenção de JSON determina se um documento JSON está contido em outro. A existência da chave determina se uma chave existe no esquema do banco de dados.
No GoogleSQL:
- Expresse a contenção JSON no seu esquema usando a função
JSON_CONTAINS
. - Crie condições de existência de chave usando o acesso de campo, operadores de subscripto
de matriz e
IS NOT NULL
. Os operadores de acesso a campos e de subscrito de matriz descrevem um caminho de documento JSON.IS NOT NULL
verifica a existência deste caminho (por exemplo,doc.sub.path[@index].key IS NOT NULL
).
- Expresse a contenção JSON no seu esquema usando a função
No PostgreSQL:
- Expresse a contenção de JSONB usando os operadores
@>
e<@
. Para mais informações, consulte Operadores JSONB. - Crie condições de existência de chave usando os operadores
?
,?|
e?&
. Para mais informações, consulte Operadores JSONB.
- Expresse a contenção de JSONB usando os operadores
Nas consultas, é possível incluir várias condições JSON de qualquer tipo no
índice de pesquisa. Também é possível incluir as condições JSON em uma combinação lógica
usando AND
, OR
e NOT
.
Verificar o uso do índice de pesquisa
Para verificar se a consulta usa um índice de pesquisa, procure um nó de verificação de índice de pesquisa no plano de execução da consulta.
Restrições
- Os índices de pesquisa, incluindo os índices de pesquisa JSON e JSONB, são usados apenas em
transações somente leitura. O Spanner pode usar índices secundários relevantes
em uma transação de leitura e gravação. Se você tentar forçar o uso de um
índice de pesquisa em uma transação de leitura e gravação, o seguinte erro vai ocorrer:
ERROR: spanner: code = "InvalidArgument", desc = "The search index AlbumsIndex cannot be used in transactional queries by default."
- As tentativas de armazenar determinados documentos JSON grandes ou muito complexos em um
índice de pesquisa podem retornar um erro
too many search token bytes
. O tamanho do token de saída desse documento JSON precisa ser menor que 10 MB. Se você não precisa que todo o documento seja pesquisável, extraia um subconjunto menor do documento (por exemplo, usando uma coluna gerada) e pesquise na coluna.
A seguir
- Saiba mais sobre tokenização e tokenizers.
- Saiba mais sobre índices de pesquisa.
- Saiba mais sobre a indexação de dados JSON.
- Saiba mais sobre como indexar dados JSONB.