Além de indexar texto, o índice da Pesquisa do Spanner search index oferece uma maneira eficiente de indexar e consultar documentos JSON e JSONB. Use índices da Pesquisa para consultas JSON e JSONB independentes ou para aumentar outras consultas de pesquisa de texto completo.
Para mais informações, consulte Indexar dados JSON e Indexar 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 da Pesquisa para acelerar consultas que incluem comparações de igualdade, contenção JSON e existência de chave condições:
- Comparações de igualdade determinam se um documento JSON ou um subcaminho dentro de um documento JSON é igual a um valor de destino.
- Contenção JSON determina se um documento JSON está contido em outro.
- Existência de chave determina se uma chave ou caminho existe em um documento JSON.
É possível expressar essas condições em cada dialeto da seguinte maneira:
No GoogleSQL:
- Construa predicados de igualdade usando os
=,!=,<>,IN, eNOT INoperadores em uma colunaJSONindexada ou um subcaminho extraído com os operadores de acesso a campos e subscritos. Por exemplo,doc = JSON '{"a": 1}',doc.sub.path[0].key = "value", oudoc.status IN ("active", "pending"). Outros operadores de comparação como<,<=,>, e>=não são acelerados por índices da Pesquisa JSON. - Expresse a contenção JSON no esquema usando a
JSON_CONTAINSfunção. - Construa condições de existência de chave usando o acesso a campos, operadores de subscritos de matriz e
IS NOT NULL. Os operadores de acesso a campos e subscritos de matriz descrevem um caminho de documento JSON.IS NOT NULLverifica a existência de esse caminho (por exemplo,doc.sub.path[@index].key IS NOT NULL).
- Construa predicados de igualdade usando os
No PostgreSQL:
- Construa predicados de igualdade usando os
=,!=,<>,IN, eNOT INoperadores em uma colunaJSONBindexada ou um subcaminho extraído com o->operador. Por exemplo,doc = '{"a": 1}'::jsonb,doc->'sub'->0->'key' = '"value"'::jsonboudoc->'status' IN ('"active"'::jsonb, '"pending"'::jsonb). Outros operadores de comparação, como<,<=,>, e>=, bem como predicados de extração de texto que usam->>, não são acelerados por índices de pesquisa JSONB. - Expresse a contenção JSONB usando os
@>e<@operadores. Para mais informações, consulte Operadores JSONB. - Construa condições de existência de chave usando os operadores
?,?|e?&. Para mais informações, consulte Operadores JSONB.
- Construa predicados de igualdade usando os
Nas consultas, é possível incluir várias condições JSON de qualquer tipo no índice da 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 da Pesquisa
Para verificar se a consulta usa um índice da Pesquisa, procure um nó Verificação do índice da Pesquisa no plano de execução da consulta.
Restrições
- Os índices da Pesquisa, incluindo í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 da Pesquisa em uma transação de leitura e gravação, o seguinte erro 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 da 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 precisar que o documento inteiro seja pesquisável, considere extrair um subconjunto menor do documento (por exemplo, usando uma coluna gerada) e pesquisar na coluna.
A seguir
- Saiba mais sobre tokenização e tokenizadores.
- Saiba mais sobre índices de pesquisa.
- Saiba como indexar dados JSON.
- Saiba como indexar dados JSONB.