Además de indexar texto, el índice de búsqueda de Spanner proporciona una forma eficiente de indexar y consultar documentos JSON y JSONB. Usa índices de búsqueda para consultas JSON y JSONB independientes, o para aumentar otras consultas de búsqueda de texto completo.
Para obtener más información, consulta Indexar datos JSON e Indexar datos JSONB.
Tokenización de JSON y JSONB
Puedes usar la función TOKENIZE_JSON
para crear un índice JSON en GoogleSQL o la función TOKENIZE_JSONB
para crear un índice JSONB en PostgreSQL. Para obtener más información, consulta TOKENIZE_JSON
y TOKENIZE_JSONB
.
Consultas JSON y JSONB
Puedes usar un índice de búsqueda para acelerar las consultas que incluyan condiciones de contención de JSON y existencia de claves. La contención de JSON determina si un documento JSON está contenido en otro. La existencia de una clave determina si una clave existe en el esquema de la base de datos.
En GoogleSQL:
- Expresa la contención de JSON en tu esquema mediante la función
JSON_CONTAINS
. - Crea condiciones de existencia de claves con los operadores de acceso a campos, subíndice de matriz
y
IS NOT NULL
. Los operadores de acceso a campos y de subíndice de matriz describen una ruta de documento JSON.IS NOT NULL
comprueba si existe esta ruta (por ejemplo,doc.sub.path[@index].key IS NOT NULL
).
- Expresa la contención de JSON en tu esquema mediante la función
En PostgreSQL:
- Expresa la contención de JSONB mediante los operadores
@>
y<@
. Para obtener más información, consulta los operadores de JSONB. - Crea condiciones de existencia de claves con los operadores
?
,?|
y?&
. Para obtener más información, consulta los operadores de JSONB.
- Expresa la contención de JSONB mediante los operadores
En sus consultas, puede incluir varias condiciones JSON de cualquier tipo en el índice de búsqueda. También puedes incluir las condiciones JSON en una combinación lógica mediante AND
, OR
y NOT
.
Consultar el uso del índice de búsqueda
Para comprobar que tu consulta usa un índice de búsqueda, busca un nodo Search index scan (Búsqueda de índice de búsqueda) en el plan de ejecución de la consulta.
Restricciones
- Los índices de búsqueda, incluidos los índices de búsqueda JSON y JSONB, solo se usan en transacciones de solo lectura. Spanner puede usar índices secundarios relevantes en una transacción de lectura y escritura. Si intentas forzar el uso de un índice de búsqueda en una transacción de lectura y escritura, se produce el siguiente error:
ERROR: spanner: code = "InvalidArgument", desc = "The search index AlbumsIndex cannot be used in transactional queries by default."
- Si se intenta almacenar determinados documentos JSON grandes o muy complejos en un índice de búsqueda, es posible que se devuelva un error
too many search token bytes
. El tamaño del token de salida de este documento JSON debe ser inferior a 10 MB. Si no necesitas que se pueda buscar en todo el documento, puedes extraer un subconjunto más pequeño del documento (por ejemplo, mediante una columna generada) y buscar en la columna.
Siguientes pasos
- Consulta información sobre la tokenización y los tokenizadores.
- Consulta información sobre los índices de búsqueda.
- Consulta información sobre la indexación de datos JSON.
- Consulta información sobre la indexación de datos JSONB.