Usa ricerca full-text nei file nello storage degli oggetti

Il package PL/SQL DBMS_CLOUD consente di creare un indice di testo nei file dell'area di memorizzazione degli oggetti, che consente di eseguire ricerche nel testo e utilizzare i caratteri jolly con la ricerca.

Informazioni sulla ricerca full-text nei file nello storage degli oggetti

È possibile creare un indice di testo nei file nello storage degli oggetti. Un indice di testo consente di eseguire una ricerca basata su parole su set di dati molto grandi nell'area di memorizzazione degli oggetti.

DBMS_CLOUD fornisce modalità rapide ed efficienti per gestire i dati nell'area di memorizzazione degli oggetti. Le API DBMS_CLOUD consentono di creare, copiare, scaricare, eliminare e attraversare i file presenti nell'area di memorizzazione degli oggetti. Quando si definiscono tabelle esterne, è possibile eseguire query SQL sui dati memorizzati nell'area di memorizzazione degli oggetti (o con tabelle esterne partizionate ibride, nei dati del database e nell'area di memorizzazione degli oggetti). Quando si utilizza DBMS_CLOUD per definire un indice di testo, è possibile cercare il testo nei dati e utilizzare i caratteri jolly.

Il supporto di Autonomous Database per la ricerca basata su parole funziona per formati di dati di uso comune, ad esempio CSV o JSON e con documenti formattati (binari), ad esempio formati PDF e DOC (MS Word). È possibile configurare una frequenza di aggiornamento che indichi la frequenza in minuti con cui l'indice viene aggiornato per qualsiasi nuovo caricamento o eliminazione.

Quando si crea un indice nello storage degli oggetti, viene creata una tabella locale con il suffisso standard INDEX_NAME$TXTIDX e la tabella può essere utilizzata per eseguire una ricerca utilizzando la parola chiave CONTAINS.

Per ulteriori informazioni, vedere Indicizzazione con Oracle Text.

Creare un indice di testo nei file di storage degli oggetti

Utilizzare DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX per creare un indice di testo nei file nello storage degli oggetti.

I documenti formattati (binari) sono supportati quando si specifica l'opzione binary_files format con DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

È possibile includere un elenco di stop word quando si specifica l'opzione stop_words format con DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Vedere Indicizzazione con Oracle Text per ulteriori informazioni sulle parole di arresto Oracle Text e sull'utilizzo di file binari.

  1. Creare un oggetto credenziale per accedere alla posizione di origine.

    Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedura.

  2. Eseguire la procedura DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX per creare un indice di testo nei file di storage degli oggetti.
    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;
    /

    In questo esempio viene creato un indice di testo EMP nei file di storage degli oggetti situati nell'URI specificato nel parametro location_uri. L'opzione refresh_rate nel parametro format specifica che l'indice EMP viene aggiornato a un intervallo di 10 minuti.

    Viene creata una tabella locale INDEX_NAME$TXTIDX. È possibile utilizzare la tabella INDEX_NAME$TXTIDX per eseguire una ricerca utilizzando CONTAINS.

    Ad esempio:

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

    Questa query restituisce i nomi di oggetto o file che contengono la stringa king.

    Per ulteriori informazioni, vedere Tabella di riferimento dell'indice di testo.

    È possibile eseguire una query su una tabella esterna utilizzando la clausola EXTERNAL MODIFY per recuperare i record effettivi.

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

    La tabella esterna EMPEXTTAB è una tabella esterna di esempio creata nella stessa tabella location_url.

    Per ulteriori informazioni, consulta la sezione Query sui dati esterni con Autonomous Database.

    Per ulteriori informazioni, vedere CREATE_EXTERNAL_TEXT_INDEX Procedura.

    Per ulteriori informazioni, vedere Configura criteri e ruoli per accedere alle risorse.

Eliminare un indice nei file di memorizzazione cloud

Utilizzare la procedura DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX per eliminare un indice di testo nei file di storage degli oggetti.

Eseguire la procedura DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX per eliminare un indice di testo nei file nello storage degli oggetti.

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

In questo esempio viene eliminato l'indice di testo EMP.

Per ulteriori informazioni, vedere DROP_EXTERNAL_TEXT_INDEX Procedura.

Tabella di riferimento indice di testo

Nel database viene creata una tabella locale con un suffisso standard INDEX_NAME$TXTIDX. Questa tabella viene creata internamente quando si esegue DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

È possibile eseguire una query sulla tabella INDEX_NAME$TXTIDX per cercare una stringa utilizzando la parola chiave CONTAINS. Ad esempio, quando si chiama la procedura DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX il valore INDEX_NAME come EMP, viene creata la tabella di riferimento del testo EMP$TXTIDX.

La tabella di riferimento del testo contiene le colonne descritte di seguito.
  • object_name: è il nome file nello storage degli oggetti che contiene la stringa di testo cercata.

  • object_path: è il bucket o l'URI della cartella di storage degli oggetti che contiene il file di storage degli oggetti.

  • mtime: è l'indicatore orario dell'ultima modifica del file di storage degli oggetti. Ora dell'ultimo accesso al file da parte di DBMS_CLOUD.

Ad esempio:
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

Questa query restituisce i nomi file e l'URI di posizione nello storage degli oggetti che contiene la stringa di testo king, in maiuscolo o in minuscolo.

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

Questa query restituisce il nome file e l'indicatore orario dell'ultima modifica dei file oggetto in cui viene creato l'indice EMP.

Monitora creazione indice di testo

Quando si esegue DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX, l'operazione di creazione dell'indice di testo viene registrata nella vista ALL_SCHEDULER_JOB_RUN_DETAILS.

È possibile eseguire una query sulla vista ALL_SCHEDULER_JOB_RUN_DETAILS per ottenere lo stato e gli eventuali errori segnalati dal job di creazione dell'indice.

Il nome del job DBMS_SCHEDULER viene derivato dal parametro INDEX_NAME specificato quando si chiama DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Per eseguire una query sulla vista ALL_SCHEDULER_JOB_RUN_DETAILS, è necessario aver eseguito il login come utente ADMIN o disporre del privilegio READ sulla vista ALL_SCHEDULER_JOB_RUN_DETAILS.

Ad esempio, la seguente istruzione SELECT con una clausola WHERE in job_name mostra i dettagli di esecuzione per il job:

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

È inoltre possibile eseguire una query per verificare l'esistenza di un job dello scheduler di creazione dell'indice.

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

Per ulteriori informazioni, vedere CREATE_EXTERNAL_TEXT_INDEX Procedura.