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. Auf diese Weise können Sie den Text durchsuchen und Platzhalter für die Suche verwenden.

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 ausführen.

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

Die Autonomous Database-Unterstützung für die 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 für den 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 Oracle Text-Stoppwörtern und zum Arbeiten mit Binärdateien finden Sie unter Mit Oracle Text indexieren.

  1. Erstellen Sie ein Zugangsdatenobjekt für den Zugriff auf den Quellspeicherort.

    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 in der URI befinden, die im Parameter location_uri angegeben ist. 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.

    Beispiele:

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

    Diese Abfrage gibt die Objekt- oder Dateinamen zurück, die den String 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 in 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 für den 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.

Referenztabelle für Textindex

Eine lokale Tabelle wird in der Datenbank 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 EMP aufrufen, wird die Textreferenztabelle EMP$TXTIDX erstellt.

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

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

  • mtime: Der Zeitstempel der letzten Änderung der Objektspeicherdatei. Dies ist der Zeitpunkt, zu dem DBMS_CLOUD zuletzt auf die Datei zugegriffen hat.

Beispiele:
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 Zeitstempel der letzten Änderung der Objektdateien zurück, für die 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 Indexerstellungsjob 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 View ALL_SCHEDULER_JOB_RUN_DETAILS abzufragen, müssen Sie als Benutzer ADMIN angemeldet sein oder die Berechtigung READ für die View ALL_SCHEDULER_JOB_RUN_DETAILS besitzen.

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 nach einem Scheduler-Job für die Indexerstellung abfragen.

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

Weitere Informationen finden Sie unter Prozedur CREATE_EXTERNAL_TEXT_INDEX.