Volltextsuche für Dateien in Object Storage verwenden

Mit dem PL/SQL-Package DBMS_CLOUD können Sie einen Textindex für die Objektspeicherdateien erstellen, mit dem Sie den Text durchsuchen und Platzhalter mit Ihrer Suche verwenden können.

Informationen zur Volltextsuche für Dateien in Object Storage

Sie können einen Textindex für Dateien im Objektspeicher erstellen. Mit einem Textindex können Sie eine wortbasierte Suche über sehr große Datasets im Objektspeicher durchführen.

DBMS_CLOUD bietet schnelle und effiziente Möglichkeiten zur Verwaltung von Daten im Objektspeicher. Mit den DBMS_CLOUD-APIs können Sie Dateien im Objektspeicher erstellen, kopieren, herunterladen, löschen und durchlaufen. Wenn Sie externe Tabellen definieren, können Sie SQL-Abfragen für Daten ausführen, die in Ihrem Objektspeicher (oder mit hybriden partitionierten externen Tabellen, über Daten in Ihrer Datenbank und im Objektspeicher) gespeichert sind. Wenn Sie DBMS_CLOUD verwenden, um einen Textindex zu definieren, können Sie Ihre Daten nach Text durchsuchen und Platzhalter verwenden.

Die Autonomous Database-Unterstützung für wortbasierte Suche funktioniert für häufig verwendete Datenformate, z. B. CSV oder JSON und mit formatierten Dokumenten (binär), z. B. PDF- und DOC-(MS Word-)Formaten. Sie können eine Aktualisierungsrate konfigurieren, die angibt, wie oft der Index für neue Uploads oder Löschvorgänge in Minuten aktualisiert wird.

Eine lokale Tabelle mit dem Standardsuffix INDEX_NAME$TXTIDX wird erstellt, wenn Sie einen Index im Objektspeicher erstellen. Mit der Tabelle können Sie eine Suche mit dem Schlüsselwort CONTAINS ausführen.

Weitere Informationen finden Sie unter Mit Oracle Text indexieren.

Textindex für Object Storage-Dateien erstellen

Verwenden Sie DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX, um einen Textindex für Dateien im Objektspeicher zu erstellen.

Formatierte Dokumente (binär) werden unterstützt, wenn Sie die Option binary_files format mit DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX angeben.

Sie können eine Stoppwortliste aufnehmen, wenn Sie die Option stop_words format mit DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX angeben.

Weitere Informationen zu Stoppwörtern in Oracle Text und zum Arbeiten mit Binärdateien finden Sie unter Mit Oracle Text indexieren.

  1. Erstellen Sie ein Zugangsdatenobjekt, um auf den Quellspeicherort zuzugreifen.

    Weitere Informationen finden Sie unter Prozedur CREATE_CREDENTIAL.

  2. Führen Sie die Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX aus, um einen Textindex für die Objektspeicherdateien zu erstellen.
    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 diesem Beispiel wird ein Textindex EMP für die Objektspeicherdateien erstellt, die sich unter der im Parameter location_uri angegebenen URI befinden. Die Option refresh_rate im Parameter format gibt an, dass der Index EMP in einem Intervall von 10 Minuten aktualisiert wird.

    Dadurch wird eine lokale Tabelle INDEX_NAME$TXTIDX erstellt. Sie können die Tabelle INDEX_NAME$TXTIDX verwenden, um eine Suche mit CONTAINS auszuführen.

    Beispiel:

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

    Diese Abfrage gibt die Objekt- oder Dateinamen zurück, die die Zeichenfolge king enthalten.

    Weitere Informationen finden Sie unter Referenztabelle für Textindex.

    Sie können eine externe Tabelle mit der Klausel EXTERNAL MODIFY abfragen, um die tatsächlichen Datensätze abzurufen.

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

    Die externe Tabelle EMPEXTTAB ist eine externe Beispieltabelle, die auf derselben location_url erstellt wird.

    Weitere Informationen finden Sie unter Externe Daten mit Autonomous Database abfragen.

    Weitere Informationen finden Sie unter Prozedur CREATE_EXTERNAL_TEXT_INDEX.

    Weitere Informationen finden Sie unter Policys und Rollen zum Zugriff auf Ressourcen konfigurieren.

Index in den Cloud-Speicherdateien löschen

Verwenden Sie die Prozedur DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX, um einen Textindex für Objektspeicherdateien zu löschen.

Führen Sie die Prozedur DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX aus, um einen Textindex für Dateien im Objektspeicher zu löschen.

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

In diesem Beispiel wird der Textindex EMP gelöscht.

Weitere Informationen finden Sie unter Prozedur DROP_EXTERNAL_TEXT_INDEX.

Textindexreferenztabelle

In Ihrer Datenbank wird eine lokale Tabelle mit dem Standardsuffix INDEX_NAME$TXTIDX erstellt. Diese Tabelle wird intern erstellt, wenn Sie DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX ausführen.

Sie können die Tabelle INDEX_NAME$TXTIDX abfragen, um mit dem Schlüsselwort CONTAINS nach einer Zeichenfolge zu suchen. Beispiel: Wenn Sie die Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX als Wert INDEX_NAME als EMP aufrufen, wird die Textreferenztabelle EMP$TXTIDX erstellt.

Die Textreferenztabelle enthält die folgenden Spalten:
  • object_name: ist der Dateiname im Objektspeicher, der die gesuchte Textzeichenfolge enthält.

  • object_path: ist der Objektspeicher-Bucket oder der Ordner-URI, der die Objektspeicherdatei enthält.

  • mtime: ist der letzte geänderte Zeitstempel der Objektspeicherdatei. Dies ist die Zeit, zu der zuletzt von DBMS_CLOUD auf die Datei zugegriffen wurde.

Beispiel:
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

Diese Abfrage gibt die Dateinamen und den Speicherort-URI im Objektspeicher zurück, der die Textzeichenfolge king in Groß- oder Kleinschreibung enthält.

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

Diese Abfrage gibt den Dateinamen und den letzten geänderten Zeitstempel der Objektdateien zurück, in denen der Index EMP erstellt wird.

Textindexerstellung überwachen

Wenn Sie DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX ausführen, wird der Textindexerstellungsvorgang in der Ansicht ALL_SCHEDULER_JOB_RUN_DETAILS protokolliert.

Sie können die View ALL_SCHEDULER_JOB_RUN_DETAILS abfragen, um den Status und alle vom Job zur Indexerstellung gemeldeten Fehler abzurufen.

Der Name des Jobs DBMS_SCHEDULER wird vom Parameter INDEX_NAME abgeleitet, der beim Aufruf von DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX angegeben wird.

Um die Ansicht ALL_SCHEDULER_JOB_RUN_DETAILS abzufragen, müssen Sie als Benutzer ADMIN angemeldet sein oder über die Berechtigung READ für die Ansicht ALL_SCHEDULER_JOB_RUN_DETAILS verfügen.

Beispiel: Die folgende SELECT-Anweisung mit einer WHERE-Klausel in job_name zeigt die Ausführungsdetails für den Job an:

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

Sie können auch abfragen, ob ein Scheduler-Job für die Indexerstellung vorhanden ist.

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

Weitere Informationen finden Sie unter Prozedur CREATE_EXTERNAL_TEXT_INDEX.