Usa ricerca JSON su documenti nello storage degli oggetti

È possibile creare un indice di ricerca JSON sui documenti che risiedono nei file memorizzati nello storage degli oggetti, che consente di cercare i campi nei documenti JSON utilizzando JSON_TEXTCONTAINS, ad esempio la ricerca con i caratteri jolly.

Usa ricerca JSON su documenti nello storage degli oggetti

Puoi creare un indice di ricerca JSON sui documenti nei file memorizzati nello storage degli oggetti. Un indice di ricerca JSON è specificamente progettato per i documenti JSON e consente di eseguire ricerche regolari e complete sui documenti o frammenti dei documenti utilizzando JSON_TEXTCONTAINS.

Per ulteriori informazioni, vedere JSON_TEXTCONTAINS Condizione.

Puoi utilizzare DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX per creare un indice di ricerca JSON nei file nello storage degli oggetti. È possibile configurare una frequenza di aggiornamento che indichi la frequenza in minuti con cui l'indice viene aggiornato per qualsiasi nuovo caricamento o eliminazione. Per ulteriori informazioni, vedere Create a JSON Search Index on JSON Documents in Files.

Quando si crea un indice di ricerca JSON, vengono creati gli oggetti riportati di seguito.

  • Indice di ricerca JSON index_name nei file JSON di storage degli oggetti.

  • Tabella locale INDEX_NAME$TXTIDX. Questa tabella è la tabella di mapping tra i documenti nei file nello storage degli oggetti e l'indice di ricerca JSON creato nel database. Per ulteriori informazioni, vedere Tabella di riferimento dell'indice di ricerca JSON.

  • Una vista con il nome standard INDEX_NAME. È possibile utilizzare la vista per eseguire una ricerca utilizzando JSON_TEXTCONTAINS. Questa vista viene creata nella parte superiore della tabella INDEX_NAME$TXTIDX. Per ulteriori informazioni, vedere Vista di riferimento dell'indice di ricerca JSON.

  • Tabella del log degli errori con il suffisso standard index_name$txtidx_err. Per ulteriori informazioni, vedere Tabella del log degli errori.

L'operazione di creazione dell'indice di ricerca JSON viene registrata nella vista ALL_SCHEDULER_JOB_RUN_DETAILS. Per ulteriori informazioni, vedere Monitora creazione indice di testo.

Autonomous Database supporta la creazione di indici di ricerca JSON per una vasta gamma di file di testo contenenti documenti JSON. Ad esempio, è possibile indicizzare i file JSON sia in formato compresso che non compresso oppure scegliere un delimitatore di documenti JSON diverso. Per ulteriori informazioni sulle opzioni di gestione dei file, vedere DBMS_CLOUD Package.

Per ulteriori informazioni, vedere Indicizzazione con Oracle Text.

Creare un indice di ricerca JSON sui documenti JSON nei file

Utilizzare DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX per creare un indice di ricerca JSON nei file JSON memorizzati nello storage degli oggetti.

Per ulteriori informazioni sulle parole chiave Oracle Text, vedere Indicizzazione con Oracle Text.

  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 ricerca JSON nei file di storage degli oggetti.
    
    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;
    /
    In questo esempio viene creato quanto segue:
    • Indice di ricerca JSON VNCLOGS nei file di storage degli oggetti situati nell'URI specificato nel parametro location_uri.

    • Tabella locale VNCLOGS$TXTIDX. Per ulteriori informazioni, vedere Tabella di riferimento dell'indice di ricerca JSON.

    • Una vista denominata VNCLOGS. Questa vista viene creata nella parte superiore della tabella VNCLOGS$TXTIDX. È possibile utilizzare la vista per eseguire una ricerca utilizzando JSON_TEXTCONTAINS. Per ulteriori informazioni, vedere Vista di riferimento dell'indice di ricerca JSON.

    • Tabella di log degli errori con il nome VNC$TXTIDX_ERR. La tabella contiene una lista di documenti JSON non validi nei file. Per ulteriori informazioni, vedere Tabella del log degli errori.

    Dopo aver creato l'indice di ricerca JSON, è possibile eseguire una query sulla vista VNCLOGS. Ad esempio:

    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}');
    

    Questa query restituisce i dettagli di log per gli indirizzi IP specificati nella condizione JSON_TEXTCONTAINS. Tenere presente che i criteri dell'indice di ricerca JSON sono specificati nella colonna file_line_json, la colonna indicizzata nella tabella degli indici di ricerca JSON nel database, mentre i documenti JSON vengono trasmessi direttamente dallo storage degli oggetti, rappresentati tramite la colonna data. La colonna data contiene il contenuto del file di storage degli oggetti.

    Per ulteriori informazioni, vedere CREATE_EXTERNAL_TEXT_INDEX Procedura.

Eliminare un indice di ricerca JSON

Utilizzare la procedura DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX per eliminare un indice di ricerca JSON nei file JSON memorizzati nello storage degli oggetti.

Ad esempio:

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

In questo esempio viene eliminato l'indice di ricerca JSON VCNLOGS.

Per ulteriori informazioni, vedere DROP_EXTERNAL_TEXT_INDEX Procedura.

Monitora creazione indice di ricerca JSON

Quando si esegue DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX, l'operazione di creazione dell'indice di ricerca JSON 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.

Tabella di riferimento dell'indice di ricerca JSON

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 JSON_TEXTCONTAINS. Ad esempio, quando si chiama la procedura DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX il valore INDEX_NAME come VNCLOGS, viene creata la tabella di riferimento dell'indice di ricerca JSON VNCLOGS$TXTIDX.

La tabella di riferimento dell'indice di ricerca JSON contiene le colonne riportate di seguito.
  • object_name: è il nome file nello storage degli oggetti che contiene la stringa di testo cercata.

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

  • length: è la lunghezza del documento JSON.

  • offset: è l'offset in byte dell'inizio del file.

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

Eseguire la query seguente per recuperare il nome dell'oggetto, il percorso dell'oggetto, l'offset e la lunghezza dalla tabella di riferimento dell'indice di ricerca 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;
 

Questa query fornisce informazioni interne sulla posizione dei file nello storage degli oggetti in cui si trovano i documenti pertinenti. La query non fornisce i documenti effettivi.

Per recuperare i documenti direttamente, utilizzare la seguente query:

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;
 

Vista di riferimento dell'indice di ricerca JSON

Una vista denominata INDEX_NAME viene creata quando si esegue DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX per creare un indice JSON.

La vista stessa non contiene dati. I dati vengono recuperati nella vista quando si esegue una query sulla vista INDEX_NAME utilizzando la condizione SQL JSON_TEXTCONTAINS.

A colonne descrizione;
OBJECT_NAME

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.

LENGTH

Lunghezza del documento JSON.

OFFSET

Offset in byte dell'inizio del file.

DATA

Il contenuto del file di storage degli oggetti.

FILE_LINE_JSON

Colonna in cui viene eseguito il comando JSON_TEXTCONTAINS.

MTIME

L'indicatore orario dell'ultima modifica del file di storage degli oggetti. Ora dell'ultimo accesso al file da parte di DBMS_CLOUD.

Tabella di log degli errori

Quando si crea un indice di ricerca JSON nei file JSON memorizzati nello storage degli oggetti, viene creata una tabella di log degli errori index_name$txtidx_err.

La tabella contiene una lista di documenti JSON non validi nei file. Un documento JSON viene contrassegnato come non valido se la lunghezza del file di origine indicizzato supera il valore predefinito o il valore specificato. Il valore predefinito è 32767 byte e il valore massimo che è possibile specificare utilizzando l'opzione json_index_doc_len format è 200000 byte. Per ulteriori informazioni, vedere Create a JSON Search Index on JSON Documents in Files.

È possibile eseguire una query su index_name$txtidx_err per ottenere la lista dei file JSON non validi segnalati durante la creazione dell'indice.

A colonne Descrizione
OBJECT_NAME 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.
OFFSET Offset byte dell'inizio della linea.
LENGTH Lunghezza del documento JSON.
LINE_NUMBER Numero di riga nel file nell'area di memorizzazione degli oggetti.