Além de indexar texto, o índice de pesquisa do Spanner oferece uma forma eficiente de indexar e consultar documentos JSON e JSONB. Use índices de pesquisa para consultas JSON e JSONB autónomas ou para aumentar outras consultas de pesquisa de texto completo.
Para mais informações, consulte os artigos Indexar dados JSON e Indexar dados JSONB.
Tokenize JSON e JSONB
Pode 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 obter detalhes, consulte TOKENIZE_JSON
e TOKENIZE_JSONB
.
Consultas JSON e JSONB
Pode usar um índice de pesquisa para acelerar as consultas que incluem condições de contenção de JSON e existência de chaves. A contenção JSON determina se um documento JSON está contido noutro. A existência de chaves determina se existe uma chave no esquema da base de dados.
No GoogleSQL:
- Expresse a contenção JSON no seu esquema através da função
JSON_CONTAINS
. - Construa condições de existência de chaves usando o acesso a campos, os operadores de subscrição de matrizes e
IS NOT NULL
. Os operadores de acesso a campos e de subscrição de matrizes 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 através da função
No PostgreSQL:
- Exprimir a contenção JSONB através dos operadores
@>
e<@
. Para mais informações, consulte os operadores JSONB. - Construa condições de existência de chaves usando os operadores
?
,?|
e?&
. Para mais informações, consulte os operadores JSONB.
- Exprimir a contenção JSONB através dos operadores
Nas suas consultas, pode incluir várias condições JSON de qualquer tipo no índice de pesquisa. Também pode incluir as condições JSON numa combinação lógica
usando AND
, OR
e NOT
.
Verifique a utilização do índice de pesquisa
Para verificar se a sua consulta usa um índice de pesquisa, procure um nó Search index scan 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 de leitura. O Spanner pode usar índices secundários relevantes numa transação de leitura/escrita. Se tentar forçar a utilização de um índice de pesquisa numa transação de leitura/escrita, ocorre o seguinte erro:
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 num índice de pesquisa podem devolver um erro
too many search token bytes
. O tamanho do token de saída deste documento JSON tem de ser inferior a 10 MB. Se não precisar que todo o documento seja pesquisável, considere extrair um subconjunto mais pequeno do documento (por exemplo, através de uma coluna gerada) e pesquisar na coluna.
O que se segue?
- Saiba mais sobre a conversão em tokens e os tokenizadores.
- Saiba mais sobre os índices de pesquisa.
- Saiba mais sobre a indexação de dados JSON.
- Saiba mais sobre a indexação de dados JSONB.