Utiliser la recherche JSON sur les documents dans Object Storage

Vous pouvez créer un index de recherche JSON sur des 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, la recherche avec des caractères génériques.

Utiliser la recherche JSON sur les 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écifiquement conçu pour les documents JSON et vous permet d'effectuer des recherches 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 d'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 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 sur la table INDEX_NAME$TXTIDX. Pour plus d'informations, reportez-vous à Vue de référence d'index de recherche JSON.

  • Table de journal d'erreurs avec le suffixe standard index_name$txtidx_err. Pour plus d'informations, reportez-vous à la section Error Log Table.

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 à Surveillance de la création des 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 au 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, reportez-vous à la section DBMS_CLOUD Package.

Pour plus d'informations, reportez-vous à Indexation avec Oracle Text.

Créer un index de recherche JSON sur les documents JSON dans les 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 d'arrêt 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.

    • Vue nommée VNCLOGS. Cette vue est créée sur 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 nommée VNC$TXTIDX_ERR. La table contient la liste des documents JSON non valides dans vos fichiers. Pour plus d'informations, reportez-vous à la section Error Log Table.

    Après avoir créé l'index de recherche JSON, vous pouvez interroger la vue VNCLOGS. Par 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, 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és par la colonne data. La colonne data contient le contenu du fichier Object Storage.

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

Par 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 à Procédure DROP_EXTERNAL_TEXT_INDEX.

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é 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'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.

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

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

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, la valeur INDEX_NAME est VNCLOGS, cela 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 comporte les colonnes suivantes :
  • object_name : nom du fichier sur Object Storage qui contient la chaîne de texte recherchée.

  • object_path est l'URI du dossier ou du bucket Object Storage qui contient le fichier Object Storage.

  • length : longueur du document JSON.

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

  • mtime : dernier horodatage modifié du fichier de stockage d'objet. Il s'agit du dernier accès au fichier par DBMS_CLOUD.

Exécutez la requête 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 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 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 sur Object Storage qui contient la chaîne de texte recherchée.

OBJECT_PATH

Bucket Object Storage ou URI de dossier qui contient le fichier Object Storage.

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

Dernier horodatage modifié du fichier de stockage d'objet. Il s'agit du dernier accès au fichier par DBMS_CLOUD.

Table de 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 du fichier sur Object Storage qui contient la chaîne de texte recherchée.
OBJECT_PATH Bucket Object Storage ou URI de dossier qui contient le fichier Object Storage.
OFFSET Décalage d'octets du début de la ligne.
LENGTH Longueur du document JSON.
LINE_NUMBER Numéro de la ligne dans le fichier à la banque d'objets.