Utiliser la recherche JSON sur des documents dans le stockage d'objets

Vous pouvez créer un index de recherche JSON sur des documents résidant dans des fichiers stockés dans le stockage d'objets, ce qui vous permet de rechercher des champs dans vos documents JSON à l'aide de JSON_TEXTCONTAINS, par exemple, une recherche avec des caractères génériques.

Utiliser la recherche JSON sur des documents dans le stockage d'objets

Vous pouvez créer un index de recherche JSON sur les documents des fichiers stockés dans le stockage d'objets. Un index de recherche JSON est spécialement conçu pour les documents JSON et vous permet d'effectuer une recherche régulière et en texte intégral sur vos documents ou fragments de vos documents à l'aide de JSON_TEXTCONTAINS.

Pour plus d'informations, voir ConditionJSON_TEXTCONTAINS.

Vous utilisez DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX pour créer un index de recherche JSON sur les fichiers du service de stockage d'objets. Vous pouvez configurer un taux d'actualisation qui indique la fréquence en minutes à laquelle l'index est actualisé pour les nouveaux chargements ou suppressions. Pour plus d'informations, voir Créer un index de recherche JSON sur des documents JSON dans des fichiers.

Les objets suivants sont créés lorsque vous créez un index de recherche JSON :

  • Un index de recherche JSON index_name sur les fichiers JSON du service de stockage d'objets.

  • Un tableau local INDEX_NAME$TXTIDX. Cette table est la table de mappage entre vos documents dans les fichiers du service de stockage d'objets et l'index de recherche JSON créé dans la base de données. Pour plus d'informations, voir Table de référence sur l'index de recherche JSON.

  • Vue portant le nom standard INDEX_NAME. Vous pouvez utiliser la vue pour effectuer une recherche à l'aide de JSON_TEXTCONTAINS. Cette vue est créée au-dessus de la table INDEX_NAME$TXTIDX. Pour plus d'informations, voir Vue de référence de l'index de recherche JSON.

  • Table du journal des erreurs avec le suffixe standard index_name$txtidx_err. Pour plus d'informations, voir Table du journal des erreurs.

L'opération de création de l'index de recherche JSON est enregistrée dans la vue ALL_SCHEDULER_JOB_RUN_DETAILS. Pour plus d'informations, voir Surveiller la création de l'index texte.

Autonomous AI Database prend en charge la création d'index de recherche JSON pour divers fichiers texte contenant des documents JSON. Par exemple, vous pouvez indexer des fichiers JSON dans un format compressé et non compressé, ou choisir un autre délimiteur de document JSON. Pour plus d'informations sur les options de traitement des fichiers, voir Ensemble DBMS_CLOUD.

Pour plus d'informations, voir Indexation avec Oracle Text.

Créer un index de recherche JSON sur des documents JSON dans des fichiers

Utilisez DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX pour créer un index de recherche JSON sur les fichiers JSON stockés dans le stockage d'objets.

Voir Indexation avec Oracle Text pour plus d'informations sur les mots vides d'Oracle Text.

  1. Créez un objet de données d'identification pour accéder à l'emplacement source.

    Pour plus d'informations, voir ProcédureCREATE_CREDENTIAL.

  2. Exécutez la procédure DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX pour créer un index de recherche JSON sur les fichiers de stockage d'objets.
    
    BEGIN 
     DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX (
            credential_name => 'OBJ_STORE_CRED',
            location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/vcnlogs/',
            index_name      => 'VNCLOGS',
            format          =>  JSON_OBJECT ('json_index' value 'true', 'json_index_doc_len' value 12000, 'file_compression' value 'gzip')
    );
    END;
    /
    Cet exemple crée les éléments suivants :
    • Un index de recherche JSON VNCLOGS sur les fichiers de stockage d'objets situés sur l'URI spécifié dans le paramètre location_uri.

    • Un tableau local VNCLOGS$TXTIDX. Pour plus d'informations, voir Table de référence sur l'index de recherche JSON.

    • Une vue nommée VNCLOGS. Cette vue est créée au-dessus de la table VNCLOGS$TXTIDX. Vous pouvez utiliser la vue pour effectuer une recherche à l'aide de JSON_TEXTCONTAINS. Pour plus d'informations, voir Vue de référence de l'index de recherche JSON.

    • Table du journal des erreurs nommée VNC$TXTIDX_ERR. Le tableau contient une liste de documents JSON non valides dans vos fichiers. Pour plus d'informations, voir Table du journal des erreurs.

    Après avoir créé l'index de recherche JSON, vous pouvez interroger la vue VNCLOGS. Exemple :

    SELECT JSON_QUERY (data, '$' returning CLOB pretty) AS RECORD 
     FROM vnclogs WHERE JSON_TEXTCONTAINS(file_line_json, '$.tuples', '{XXX.XXX.0.1.10.10.10.10.null.XXX_345}');
    

    Cette interrogation retourne les détails du journal pour les adresses IP spécifiées dans la condition JSON_TEXTCONTAINS. Notez que les critères d'index de recherche JSON sont spécifiés dans la colonne file_line_json, la colonne indexée dans la table d'index de recherche JSON de la base de données, tandis que les documents JSON sont transmis directement à partir du stockage d'objets, représenté au moyen de la colonne data. La colonne data contient le contenu du fichier de stockage d'objets.

    Pour plus d'informations, voir ProcédureCREATE_EXTERNAL_TEXT_INDEX.

Supprimer un index de recherche JSON

Utilisez la procédure DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX pour supprimer un index de recherche JSON sur les fichiers JSON stockés dans le stockage d'objets.

Exemple :

BEGIN 
 DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX (
  index_name => 'VCNLOGS',
);
END;
/

Cet exemple supprime l'index de recherche JSON VCNLOGS.

Pour plus d'informations, voir ProcédureDROP_EXTERNAL_TEXT_INDEX.

Surveiller la création de l'index de recherche JSON

Lorsque vous exécutez DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX, l'opération de création de l'index de recherche JSON est enregistrée dans la vue ALL_SCHEDULER_JOB_RUN_DETAILS.

Vous pouvez interroger la vue ALL_SCHEDULER_JOB_RUN_DETAILS pour obtenir le statut et toute erreur signalée par la tâche de création d'index.

Le nom de la tâche DBMS_SCHEDULER est dérivé du paramètre INDEX_NAME spécifié lorsque vous appelez DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Pour interroger la vue ALL_SCHEDULER_JOB_RUN_DETAILS, vous devez être connecté en tant qu'utilisateur ADMIN ou disposer du privilège READ sur la vue ALL_SCHEDULER_JOB_RUN_DETAILS.

Par exemple, l'énoncé SELECT suivant avec une clause WHERE sur job_name affiche les détails d'exécution de la tâche :

SELECT status, additional_info 
   FROM all_scheduler_job_run_details WHERE LOWER(job_name) = LOWER('index_name$JOB');

Vous pouvez également rechercher l'existence d'un travail du programmateur de création d'index.

Exemple :
SELECT status 
    FROM all_scheduler_jobs where LOWER(job_name) = LOWER('index_name$JOB');

Pour plus d'informations, voir ProcédureCREATE_EXTERNAL_TEXT_INDEX.

Table de référence d'index de recherche JSON

Une table locale est créée dans votre base de données avec le suffixe standard INDEX_NAME$TXTIDX. Cette table est créée en interne lorsque vous exécutez DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Vous pouvez interroger la table INDEX_NAME$TXTIDX pour rechercher une chaîne à l'aide du mot clé JSON_TEXTCONTAINS. Par exemple, lorsque vous appelez la procédure DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX en tant que INDEX_NAME, la valeur VNCLOGS crée la table de référence de l'index de recherche JSON VNCLOGS$TXTIDX.

La table de référence d'index de recherche JSON contient les colonnes suivantes :
  • object_name : Nom du fichier dans le stockage d'objets qui contient la chaîne de texte recherchée.

  • object_path : Il s'agit de l'URI du seau ou du dossier de stockage d'objets qui contient le fichier de stockage d'objets.

  • length : Longueur du document JSON.

  • offset : Décalage d'octets du début du fichier.

  • mtime : Est l'horodatage de la dernière modification du fichier de stockage d'objets. Il s'agit de la dernière fois où DBMS_CLOUD a accédé au fichier.

Exécutez l'interrogation suivante pour extraire le nom de l'objet, le chemin de l'objet, le décalage et la longueur de la table de référence de l'index de recherche JSON :
SELECT * FROM (SELECT object_name, object_path, length, offset 
 FROM vnclogs$txtidx 
 WHERE JSON_TEXTCONTAINS (file_line_json, '$.tuples', '{XXX.XXX.0.1.10.10.10.10.null.XXX_345}') 
 ORDER BY mtime DESC) 
 WHERE rownum < 3;
 

Cette interrogation fournit des informations internes sur l'emplacement des documents pertinents dans vos fichiers du service de stockage d'objets. L'interrogation ne fournit pas les documents réels.

Pour extraire directement les documents, utilisez l'interrogation suivante :

SELECT * FROM (SELECT object_name, object_path, data
 FROM vnclogs
 WHERE JSON_TEXTCONTAINS (file_line_json, '$.tuples', '{XXX.XXX.0.1.10.10.10.10.null.XXX_345}')
 ORDER BY mtime DESC)
 WHERE rownum < 3;
 

Vue de référence d'index de recherche JSON

Une vue portant le nom INDEX_NAME est créée lorsque vous exécutez DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX pour créer un index JSON.

La vue elle-même ne contient aucune donnée. Les données sont extraites dans la vue lorsque vous interrogez la vue INDEX_NAME à l'aide de la condition SQL JSON_TEXTCONTAINS.

Colonne Description
OBJECT_NAME

Nom du fichier dans le stockage d'objets qui contient la chaîne de texte recherchée.

OBJECT_PATH

URI du seau ou du dossier de stockage d'objets qui contient le fichier de stockage d'objets.

LENGTH

Longueur du document JSON.

OFFSET

Décalage d'octets du début du fichier.

DATA

Contenu du fichier de stockage d'objets.

FILE_LINE_JSON

Colonne sur laquelle JSON_TEXTCONTAINS est effectué.

MTIME

Horodatage de la dernière modification du fichier de stockage d'objets. Il s'agit de la dernière fois où DBMS_CLOUD a accédé au fichier.

Table du journal des erreurs

Une table de journal des erreurs index_name$txtidx_err est créée lorsque vous créez un index de recherche JSON sur les fichiers JSON stockés dans le stockage d'objets.

Le tableau contient une liste des documents JSON non valides dans vos fichiers. Un document JSON est marqué comme non valide si la longueur du fichier source indexé dépasse la valeur par défaut ou la valeur spécifiée. La valeur par défaut est 32767 octets et la valeur maximale que vous pouvez spécifier à l'aide de l'option json_index_doc_len format est 200000 octets. Pour plus d'informations, voir Créer un index de recherche JSON sur des documents JSON dans des fichiers.

Vous pouvez interroger index_name$txtidx_err pour obtenir la liste des fichiers JSON non valides signalés lors de la création de l'index.

Colonne Description
OBJECT_NAME Nom du fichier dans le stockage d'objets qui contient la chaîne de texte recherchée.
OBJECT_PATH URI du seau ou du dossier de stockage d'objets qui contient le fichier de stockage d'objets.
OFFSET Décalage d'octet du début de la ligne.
LENGTH Longueur du document JSON.
LINE_NUMBER Numéro de ligne dans le fichier du magasin d'objets.