Utiliser la recherche JSON sur des documents dans Object Storage

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

Utiliser la recherche JSON sur des documents dans Object Storage

Vous pouvez créer un index de recherche JSON sur les documents dans les fichiers stockés dans Object Storage. Un index de recherche JSON est spécialement conçu pour les documents JSON et vous permet d'effectuer des recherches de texte régulières et complètes sur vos documents ou fragments de vos documents à l'aide de JSON_TEXTCONTAINS.

Pour plus d'informations, reportez-vous à JSON_TEXTCONTAINS Condition.

Utilisez DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX pour créer un index de recherche JSON sur les fichiers dans Object Storage. Vous pouvez configurer une fréquence d'actualisation qui indique la fréquence, en minutes, à laquelle l'index est actualisé pour les nouveaux téléchargements ou suppressions. Pour plus d'informations, reportez-vous à Création d'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 :

  • Index de recherche JSON index_name sur les fichiers JSON Object Storage.

  • Table locale INDEX_NAME$TXTIDX. Cette table est la table de correspondance entre vos documents dans les fichiers dans Object Storage et l'index de recherche JSON créé dans la base de données. Pour plus d'informations, reportez-vous à Table de référence d'index de recherche JSON.

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

  • Table de journal des erreurs avec le suffixe standard index_name$txtidx_err. Pour plus d'informations, reportez-vous à Table du journal des erreurs.

L'opération de création d'index de recherche JSON est journalisée dans la vue ALL_SCHEDULER_JOB_RUN_DETAILS. Pour plus d'informations, reportez-vous à Surveiller la création d'index de texte.

Autonomous 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 délimiteur de document JSON différent. Pour plus d'informations sur les options de gestion des fichiers, reportez-vous à DBMS_CLOUD Package.

Pour plus d'informations, reportez-vous à 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 Object Storage.

Pour plus d'informations sur les mots vides Oracle Text, reportez-vous à Indexation avec Oracle Text.

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

    Pour plus d'informations, reportez-vous à Procédure CREATE_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'objet.
    
    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 :
    • Index de recherche JSON VNCLOGS sur les fichiers Object Storage situés à l'URI indiqué dans le paramètre location_uri.

    • Table locale VNCLOGS$TXTIDX. Pour plus d'informations, reportez-vous à Table de référence d'index de recherche JSON.

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

    • Table de journal d'erreurs portant le nom VNC$TXTIDX_ERR. La table contient la liste des documents JSON non valides dans vos fichiers. Pour plus d'informations, reportez-vous à 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 requête renvoie les détails du journal pour les adresses IP indiquées dans la condition JSON_TEXTCONTAINS. Les critères d'index de recherche JSON sont indiqués sur 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 d'Object Storage, représenté via la colonne data. La colonne data contient le contenu du fichier Object Storage.

    Pour plus d'informations, reportez-vous à CREATE_EXTERNAL_TEXT_INDEX Procédure.

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 Object Storage.

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, reportez-vous à DROP_EXTERNAL_TEXT_INDEX Procédure.

Surveiller la création d'index de recherche JSON

Lorsque vous exécutez DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX, l'opération de création d'index de recherche JSON est journalisé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 le travail de création d'index.

Le nom du travail DBMS_SCHEDULER est dérivé du paramètre INDEX_NAME indiqué lors de l'appel de 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'instruction SELECT suivante avec une clause WHERE sur job_name affiche les détails d'exécution du travail :

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 de planificateur de création d'index.

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

Pour plus d'informations, reportez-vous à CREATE_EXTERNAL_TEXT_INDEX Procédure.

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

Une table locale est créée dans la 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 VNCLOGS, la valeur INDEX_NAME crée la table de référence d'index de recherche JSON VNCLOGS$TXTIDX.

La table de référence d'index de recherche JSON contient les colonnes suivantes :
  • object_name : nom de fichier sur Object Storage qui contient la chaîne de texte recherchée.

  • object_path : est l'URI de dossier ou de bucket Object Storage qui contient le fichier de stockage d'objet.

  • length : longueur du document JSON.

  • offset : décalage d'octet du début du fichier.

  • mtime : horodatage de la dernière modification du fichier de stockage d'objet. Il s'agit de l'heure à laquelle le fichier a été consulté pour la dernière fois par DBMS_CLOUD.

Exécutez la requête suivante pour extraire le nom d'objet, le chemin d'objet, le décalage et la longueur de la table de référence d'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 requête fournit des informations internes sur l'emplacement des documents pertinents dans vos fichiers dans Object Storage. La requête ne fournit pas les documents réels.

Pour extraire les documents directement, utilisez la requête 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 Référence de l'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 de fichier sur Object Storage qui contient la chaîne de texte recherchée.

OBJECT_PATH

Le bucket ou l'URI de dossier Object Storage qui contient le fichier de stockage d'objet.

LENGTH

Longueur du document JSON.

OFFSET

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

DATA

Contenu du fichier Object Storage.

FILE_LINE_JSON

Colonne sur laquelle JSON_TEXTCONTAINS est exécuté.

MTIME

Horodatage de la dernière modification du fichier de stockage d'objet. Il s'agit de l'heure à laquelle le fichier a été consulté pour la dernière fois par DBMS_CLOUD.

Table du journal des erreurs

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

La table contient la 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 indiquer à l'aide de l'option json_index_doc_len format est 200000 octets. Pour plus d'informations, reportez-vous à Création d'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 de fichier sur Object Storage qui contient la chaîne de texte recherchée.
OBJECT_PATH Le bucket ou l'URI de dossier Object Storage qui contient le fichier de stockage d'objet.
OFFSET Décalage d'octet du début de la ligne.
LENGTH Longueur du document JSON.
LINE_NUMBER Numéro de ligne du fichier dans la banque d'objets.