En plus d'indexer le texte, l'index de recherche Spanner permet d'indexer et d'interroger efficacement les documents JSON et JSONB. Utilisez des index de recherche pour les requêtes JSON et JSONB autonomes, ou pour enrichir d'autres requêtes de recherche dans le texte.
Pour en savoir plus, consultez Indexer des données JSON et Indexer des données JSONB.
Tokeniser JSON et JSONB
Vous pouvez utiliser la fonction TOKENIZE_JSON
pour créer un indice JSON dans GoogleSQL ou la fonction TOKENIZE_JSONB
pour créer un indice JSONB dans PostgreSQL. Pour en savoir plus, consultez TOKENIZE_JSON
et TOKENIZE_JSONB
.
Requêtes JSON et JSONB
Vous pouvez utiliser un indice de recherche pour accélérer les requêtes qui incluent des conditions de contenant JSON et d'existence de clé. La structuration JSON détermine si un document JSON est contenu dans un autre. L'existence de la clé détermine si une clé existe dans le schéma de la base de données.
Dans GoogleSQL:
- Exprimez la structuration JSON dans votre schéma à l'aide de la fonction
JSON_CONTAINS
. - Créez des conditions d'existence de clé à l'aide des opérateurs d'accès au champ, des opérateurs de sous-scripteur de tableau et de
IS NOT NULL
. Les opérateurs d'accès aux champs et d'indice de tableau décrivent un chemin d'accès au document JSON.IS NOT NULL
vérifie l'existence de ce chemin d'accès (par exemple,doc.sub.path[@index].key IS NOT NULL
).
- Exprimez la structuration JSON dans votre schéma à l'aide de la fonction
Dans PostgreSQL:
- Exprimer la structuration JSONB à l'aide des opérateurs
@>
et<@
Pour en savoir plus, consultez la section Opérateurs JSONB. - Créez des conditions d'existence de clé à l'aide des opérateurs
?
,?|
et?&
. Pour en savoir plus, consultez la section Opérateurs JSONB.
- Exprimer la structuration JSONB à l'aide des opérateurs
Dans vos requêtes, vous pouvez inclure plusieurs conditions JSON de n'importe quel type dans l'index de recherche. Vous pouvez également inclure les conditions JSON dans une combinaison logique à l'aide de AND
, OR
et NOT
.
Vérifier l'utilisation de l'index de recherche
Pour vérifier que votre requête utilise un index de recherche, recherchez un nœud Analyse de l'index de recherche dans le plan d'exécution de la requête.
Restrictions
- Les index de recherche, y compris les index de recherche JSON et JSONB, ne sont utilisés que dans les transactions en lecture seule. Spanner peut utiliser des index secondaires pertinents dans une transaction en lecture/écriture. Si vous essayez de forcer l'utilisation d'un indice de recherche dans une transaction en lecture-écriture, l'erreur suivante se produit :
ERROR: spanner: code = "InvalidArgument", desc = "The search index AlbumsIndex cannot be used in transactional queries by default."
- Les tentatives de stockage de certains documents JSON volumineux ou très complexes dans un indice de recherche peuvent renvoyer une erreur
too many search token bytes
. La taille du jeton de sortie de ce document JSON doit être inférieure à 10 Mo. Si vous n'avez pas besoin que l'intégralité du document soit accessible par recherche, envisagez d'extraire un sous-ensemble plus petit du document (par exemple, à l'aide d'une colonne générée) et de rechercher dans la colonne à la place.
Étape suivante
- En savoir plus sur la tokenisation et les tokenizers
- En savoir plus sur les index de recherche
- Découvrez comment indexer des données JSON.
- Découvrez comment indexer des données JSONB.