Utiliser la recherche en texte intégral sur les fichiers du stockage d'objets

L'ensemble PL/SQL DBMS_CLOUD vous permet de créer un index de texte sur les fichiers du magasin d'objets, ce qui vous permet de rechercher du texte et d'utiliser des caractères génériques avec votre recherche.

À propos de la recherche en texte intégral sur les fichiers du stockage d'objets

Vous pouvez créer un index de texte sur les fichiers du stockage d'objets. Un index de texte vous permet d'effectuer une recherche par mot sur des jeux de données très volumineux dans le magasin d'objets.

DBMS_CLOUD fournit des moyens rapides et efficaces de gérer les données dans le magasin d'objets. Les API DBMS_CLOUD vous permettent de créer, copier, télécharger, supprimer et parcourir les fichiers présents dans le magasin d'objets. Lorsque vous définissez des tables externes, vous pouvez exécuter des interrogations SQL sur les données stockées dans votre magasin d'objets (ou avec des tables externes partitionnées hybrides, entre les données de votre base de données et dans le magasin d'objets). Lorsque vous utilisez DBMS_CLOUD pour définir un index de texte, cela vous permet de rechercher du texte dans vos données et d'utiliser des caractères génériques.

La prise en charge de la base de données d'IA autonome pour la recherche par mot fonctionne pour les formats de données couramment utilisés, par exemple CSV ou JSON et avec des documents formatés (binaires), par exemple les formats PDF et DOC (MS Word). 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.

Une table locale avec le suffixe standard INDEX_NAME$TXTIDX est créée lorsque vous créez un index sur le stockage d'objets et vous pouvez utiliser la table pour effectuer une recherche à l'aide du mot clé CONTAINS.

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

Créer un index de texte dans les fichiers de stockage d'objets

Utilisez DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX pour créer un index de texte sur les fichiers du stockage d'objets.

Les documents formatés (binaires) sont pris en charge lorsque vous spécifiez l'option binary_files format avec DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Vous pouvez inclure une liste de mots vides lorsque vous spécifiez l'option stop_words format avec DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Voir Indexation avec Oracle Text pour plus d'informations sur les mots d'arrêt Oracle Text et l'utilisation des fichiers binaires.

  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 texte sur les fichiers de stockage d'objets.
    BEGIN 
    DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX (
            credential_name => 'DEFAULT_CREDENTIAL',
            location_uri    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/ts_data/'
            index_name      => 'EMP',
            format          => JSON_OBJECT ('refresh_rate' value 10)
    );
    END;
    /

    Cet exemple crée un index de texte EMP sur les fichiers de stockage d'objets situés sur l'URI spécifié dans le paramètre location_uri. L'option refresh_rate du paramètre format spécifie que l'index EMP est actualisé à un intervalle de 10 minutes.

    Cela crée une table locale INDEX_NAME$TXTIDX. Vous pouvez utiliser la table INDEX_NAME$TXTIDX pour effectuer une recherche à l'aide de CONTAINS.

    Exemple :

    
     SELECT object_name FROM EMP$TXTIDX
          WHERE CONTAINS(object_name,'king') > 0;
    

    Cette interrogation retourne les noms d'objet ou de fichier qui contiennent la chaîne king.

    Pour plus d'informations, voir Table de référence d'index de texte.

    Vous pouvez interroger une table externe à l'aide de la clause EXTERNAL MODIFY pour extraire les enregistrements réels.

    
    SELECT * FROM EMPEXTTAB EXTERNAL MODIFY ((location_url object_name));
    
    Note

    La table externe EMPEXTTAB est un exemple de table externe créé sur le même location_url.

    Pour plus d'informations, voir Interroger les données externes avec une base de données d'intelligence artificielle autonome.

    Pour plus d'informations, voir ProcédureCREATE_EXTERNAL_TEXT_INDEX.

    Pour plus d'informations, voir Configurer les politiques et les rôles pour accéder aux ressources.

Supprimer un index sur les fichiers de stockage en nuage

Utilisez la procédure DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX pour supprimer un index de texte dans les fichiers de stockage d'objets.

Exécutez la procédure DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX pour supprimer un index de texte sur les fichiers du stockage d'objets.

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

Cet exemple supprime l'index de texte EMP.

Pour plus d'informations, voir ProcédureDROP_EXTERNAL_TEXT_INDEX.

Table de référence d'index de texte

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é CONTAINS. Par exemple, lorsque vous appelez la procédure DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX en tant que INDEX_NAME, la valeur EMP crée la table de référence de texte EMP$TXTIDX.

La table de référence de texte 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 du seau de stockage d'objets ou de l'URI du dossier qui contient le fichier de stockage d'objets.

  • 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.

Exemple :
SELECT object_path, object_name FROM EMP$TXTIDX WHERE CONTAINS(OBJECT_NAME, 'king') > 0;
 
OBJECT_PATH                                                                                      OBJECT_NAME
------------------------------------------------------------------------------------------      ------------------------------------
https://objectstorage.us-phoenix-1.oraclecloud.com/n/example1/b/adbs_data_share/o/ts_data/       data_2_20221026T195313585601Z.json

Cette interrogation retourne les noms de fichier et l'URI d'emplacement sur le stockage d'objets qui contient la chaîne de texte king, en majuscules ou en minuscules.

SELECT object_name, mtime FROM EMP$TXTIDX;
 
OBJECT_NAME                     MTIME
----------------------------- -------------------------------------
data_1_20220531T165402Z.json    31-MAY-22 04.54.02.979000 PM +00:00
data_1_20220531T165427Z.json    31-MAY-22 04.54.27.997000 PM +00:00

Cette interrogation retourne le nom du fichier et l'horodatage de la dernière modification des fichiers d'objet sur lesquels l'index EMP est créé.

Surveiller la création d'index de texte

Lorsque vous exécutez DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX, l'opération de création d'index texte 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.