Usar Pesquisa de Texto Completo em Arquivos no Serviço Object Storage

O pacote PL/SQL DBMS_CLOUD permite que você crie um índice de texto nos arquivos de armazenamento de objetos, o que permite pesquisar o texto e usar curingas com sua pesquisa.

Sobre a Pesquisa de Texto Completo em Arquivos no Serviço Object Storage

Você pode criar um índice de texto em arquivos no armazenamento de objetos. Um índice de texto permite que você execute uma pesquisa baseada em palavras em conjuntos de dados muito grandes no armazenamento de objetos.

O DBMS_CLOUD fornece maneiras rápidas e eficientes de gerenciar dados no armazenamento de objetos. As APIs DBMS_CLOUD permitem que você crie, copie, faça download, exclua e percorra arquivos presentes no armazenamento de objetos. Ao definir tabelas externas, você pode executar consultas SQL em dados armazenados em seu armazenamento de objetos (ou com tabelas externas particionadas híbridas, entre dados em seu banco de dados e no armazenamento de objetos). Quando você usa DBMS_CLOUD para definir um índice de texto, isso permite que você pesquise texto em seus dados e use curingas.

O suporte do Autonomous Database para pesquisa baseada em palavras funciona para formatos de dados comumente usados, por exemplo, CSV ou JSON e com documentos formatados (binário), por exemplo, formatos PDF e DOC (MS Word). Você pode configurar uma taxa de atualização que indique a frequência em minutos na qual o índice é atualizado para quaisquer novos uploads ou exclusões.

Uma tabela local com o sufixo padrão INDEX_NAME$TXTIDX é criada quando você cria um índice no armazenamento de objetos e pode utilizar a tabela para executar uma pesquisa usando a palavra-chave CONTAINS.

Consulte Indexando com o Oracle Text para obter mais informações.

Criar um Índice de Texto nos Arquivos do Object Storage

Use DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX para criar um índice de texto em arquivos no armazenamento de objetos.

Documentos formatados (binários) são suportados quando você especifica a opção binary_files format com DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

É possível incluir uma lista de palavras interrompidas quando você especifica a opção stop_words format com DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Consulte Indexando com o Oracle Text para obter mais informações sobre palavras de interrupção do Oracle Text e como trabalhar com arquivos binários.

  1. Crie um objeto de credencial para acessar o local de origem.

    Consulte CREATE_CREDENTIAL Procedures para obter mais informações.

  2. Execute o procedimento DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX para criar um índice de texto nos arquivos de armazenamento 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;
    /

    Este exemplo cria um índice de texto EMP nos arquivos de armazenamento de objetos localizados no URI especificado no parâmetro location_uri. A opção refresh_rate no parâmetro format especifica que o índice EMP é atualizado em um intervalo de 10 minutos.

    Isso cria uma tabela local INDEX_NAME$TXTIDX. Você pode utilizar a tabela INDEX_NAME$TXTIDX para executar uma pesquisa usando CONTAINS.

    Por exemplo:

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

    Essa consulta retorna o objeto ou os nomes de arquivo que contêm a string king.

    Consulte Tabela de Referência de Índice de Texto para obter mais informações.

    Você pode consultar uma tabela externa usando a cláusula EXTERNAL MODIFY para recuperar os registros reais.

    
    SELECT * FROM EMPEXTTAB EXTERNAL MODIFY ((location_url object_name));
    
    Observação

    A tabela externa EMPEXTTAB é uma tabela externa de amostra que é criada na mesma location_url.

    Consulte Consultar Dados Externos com o Autonomous Database para obter mais informações.

    Consulte CREATE_EXTERNAL_TEXT_INDEX Procedures para obter mais informações.

    Consulte Configurar Políticas e Atribuições para Acessar Recursos para obter mais informações.

Eliminar um Índice nos Arquivos de Armazenamento na Nuvem

Use o procedimento DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX para eliminar um índice de texto em arquivos de armazenamento de objetos.

Execute o procedimento DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX para eliminar um índice de texto em arquivos no armazenamento de objetos.

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

Este exemplo elimina o índice de texto EMP.

Consulte DROP_EXTERNAL_TEXT_INDEX Procedures para obter mais informações.

Tabela de Referência do Índice de Texto

Uma tabela local é criada no seu banco de dados com um sufixo padrão INDEX_NAME$TXTIDX. Esta tabela é criada internamente quando você executa o DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Você pode consultar a tabela INDEX_NAME$TXTIDX para procurar uma string usando a palavra-chave CONTAINS. Por exemplo, quando você chama o procedimento DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX do valor INDEX_NAME como EMP, isso cria o EMP$TXTIDX da tabela de referência de texto.

A tabela de referência de texto tem as seguintes colunas:
  • object_name: é o nome do arquivo no armazenamento de objetos que contém a string de texto pesquisada.

  • object_path: é o bucket de armazenamento de objetos ou o URI da pasta que contém o arquivo de armazenamento de objetos.

  • mtime: é o último timestamp modificado do arquivo de armazenamento de objetos. Este é o horário em que o arquivo foi acessado pela última vez por DBMS_CLOUD.

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

Essa consulta retorna os nomes de arquivo e o URI de local no armazenamento de objetos que contém a string de texto king, em letras maiúsculas ou 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 retorna o nome do arquivo e o timestamp da última modificação dos arquivos de objeto nos quais o índice EMP é criado.

Criação do Índice de Texto do Monitor

Quando você executa o DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX, a operação de criação de índice de texto é registrada na view ALL_SCHEDULER_JOB_RUN_DETAILS.

Você pode consultar a view ALL_SCHEDULER_JOB_RUN_DETAILS para obter o status e qualquer erro reportado pelo job de criação de índice.

O nome do job DBMS_SCHEDULER é derivado do parâmetro INDEX_NAME especificado quando você chama DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX.

Para consultar a view ALL_SCHEDULER_JOB_RUN_DETAILS, você deve estar conectado como o usuário ADMIN ou ter o privilégio READ na view ALL_SCHEDULER_JOB_RUN_DETAILS.

Por exemplo, a seguinte instrução SELECT com uma cláusula WHERE em job_name mostra os detalhes da execução do job:

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

Você também pode consultar a existência de um job do scheduler de criação de índice.

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

Consulte CREATE_EXTERNAL_TEXT_INDEX Procedures para obter mais informações.