Uso de la búsqueda de texto completo en archivos de Object Storage

El paquete PL/SQL DBMS_CLOUD permite crear un índice de texto en los archivos del almacén de objetos, lo que permite buscar el texto y utilizar comodines con la búsqueda.

Acerca de la búsqueda de texto completo en archivos de Object Storage

Puede crear un índice de texto en los archivos de Object Storage. Un índice de texto permite realizar una búsqueda basada en palabras en juegos de datos muy grandes en el almacén de objetos.

DBMS_CLOUD proporciona formas rápidas y eficientes de gestionar datos en el almacén de objetos. Las API DBMS_CLOUD le permiten crear, copiar, descargar, suprimir y recorrer archivos presentes en el almacén de objetos. Cuando se definen tablas externas, se pueden ejecutar consultas SQL sobre los datos almacenados en el almacén de objetos (o con tablas externas particionadas híbridas, en los datos de la base de datos y en el almacén de objetos). Cuando se utiliza DBMS_CLOUD para definir un índice de texto, esto permite buscar texto en los datos y utilizar comodines.

El soporte de Autonomous Database para la búsqueda basada en palabras funciona para formatos de datos de uso común, por ejemplo CSV o JSON y con documentos con formato (binario), por ejemplo, formatos PDF y DOC (MS Word). Puede configurar un ratio de refrescamiento que indique la frecuencia en minutos con la que se refresca el índice para las nuevas cargas o supresiones.

Se crea una tabla local con el sufijo estándar INDEX_NAME$TXTIDX al crear un índice en el almacenamiento de objetos y puede utilizar la tabla para realizar una búsqueda mediante la palabra clave CONTAINS.

Consulte Indexación con Oracle Text para obtener más información.

Creación de un índice de texto en archivos de Object Storage

Utilice DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX para crear un índice de texto en los archivos de Object Storage.

Los documentos con formato (binario) están soportados cuando se especifica la opción binary_files format con DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Puede incluir una lista de palabras de parada al especificar la opción stop_words format con DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Consulte Indexación con Oracle Text para obtener más información sobre las palabras irrelevantes de Oracle Text y el trabajo con archivos binarios.

  1. Cree un objeto de credencial para acceder a la ubicación de origen.

    Consulte CREATE_CREDENTIAL Procedure para obtener más información.

  2. Ejecute el procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX para crear un índice de texto en los archivos de almacenamiento de objetos.
    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;
    /

    En este ejemplo se crea un índice de texto EMP en los archivos de almacenamiento de objetos ubicados en el URI especificado en el parámetro location_uri. La opción refresh_rate del parámetro format especifica que el índice EMP se refresca en un intervalo de 10 minutos.

    Esto crea una tabla local INDEX_NAME$TXTIDX. Puede utilizar la tabla INDEX_NAME$TXTIDX para realizar una búsqueda mediante CONTAINS.

    Por ejemplo:

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

    Esta consulta devuelve los nombres de objetos o archivos que contienen la cadena king.

    Consulte Tabla de referencia de índice de texto para obtener más información.

    Puede consultar una tabla externa mediante la cláusula EXTERNAL MODIFY para recuperar los registros reales.

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

    La tabla externa EMPEXTTAB es una tabla externa de ejemplo que se crea en la misma location_url.

    Consulte Consulta de datos externos con Autonomous Database para obtener más información.

    Consulte CREATE_EXTERNAL_TEXT_INDEX Procedure para obtener más información.

    Consulte Configuración de políticas y roles para acceder a recursos para obtener más información.

Borrado de un índice en los archivos de almacenamiento en la nube

Utilice el procedimiento DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX para borrar un índice de texto en los archivos de almacenamiento de objetos.

Ejecute el procedimiento DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX para borrar un índice de texto en los archivos del almacenamiento de objetos.

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

En este ejemplo se borra el índice de texto EMP.

Consulte DROP_EXTERNAL_TEXT_INDEX Procedure para obtener más información.

Tabla de referencia de índice de texto

Se crea una tabla local en la base de datos con un sufijo estándar INDEX_NAME$TXTIDX. Esta tabla se crea internamente al ejecutar DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Puede consultar la tabla INDEX_NAME$TXTIDX para buscar una cadena mediante la palabra clave CONTAINS. Por ejemplo, al llamar al procedimiento DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX al valor INDEX_NAME como EMP, se crea la tabla de referencia de texto EMP$TXTIDX.

La tabla de referencia de texto tiene las siguientes columnas:
  • object_name: es el nombre de archivo del almacenamiento de objetos que contiene la cadena de texto buscada.

  • object_path: es el URI de carpeta o cubo de almacenamiento de objetos que contiene el archivo de almacenamiento de objetos.

  • mtime: es el último registro de hora modificado del archivo de almacenamiento de objetos. Esta es la hora de la última vez que DBMS_CLOUD accedió al archivo.

Por ejemplo:
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

Esta consulta devuelve los nombres de archivo y el URI de ubicación en el almacenamiento de objetos que contiene la cadena de texto king, en mayúsculas o minúsculas.

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

Esta consulta devuelve el nombre del archivo y el registro de hora de la última modificación de los archivos de objeto en los que se crea el índice EMP.

Creación de índices de texto de supervisión

Al ejecutar DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX, la operación de creación de índice de texto se registra en la vista ALL_SCHEDULER_JOB_RUN_DETAILS.

Puede consultar la vista ALL_SCHEDULER_JOB_RUN_DETAILS para obtener el estado y cualquier error informado por el trabajo de creación de índice.

El nombre del trabajo DBMS_SCHEDULER se deriva del parámetro INDEX_NAME especificado al llamar a DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Para consultar la vista ALL_SCHEDULER_JOB_RUN_DETAILS, debe estar conectado como usuario ADMIN o tener el privilegio READ en la vista ALL_SCHEDULER_JOB_RUN_DETAILS.

Por ejemplo, la siguiente sentencia SELECT con una cláusula WHERE en job_name muestra los detalles de ejecución del trabajo:

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

También puede consultar la existencia de un trabajo del programador de creación de índices.

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

Consulte CREATE_EXTERNAL_TEXT_INDEX Procedure para obtener más información.