JSON-Suche für Dokumente in Object Storage verwenden

Sie können einen JSON-Suchindex für Dokumente erstellen, die in Dateien gespeichert sind, die in Object Storage gespeichert sind. Dadurch können Sie Felder in Ihren JSON-Dokumenten mit JSON_TEXTCONTAINS durchsuchen, z.B. mit Platzhaltern.

JSON-Suche für Dokumente in Object Storage verwenden

Sie können einen JSON-Suchindex für Dokumente in Dateien erstellen, die in Object Storage gespeichert sind. Ein JSON-Suchindex wurde speziell für JSON-Dokumente entwickelt und ermöglicht es Ihnen, Ihre Dokumente oder Fragmente Ihrer Dokumente mit JSON_TEXTCONTAINS regelmäßig sowie Volltextsuche durchzuführen.

Weitere Informationen finden Sie unter JSON_TEXTCONTAINS Bedingung.

Mit DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX erstellen Sie einen JSON-Suchindex für Dateien in Object Storage. Sie können eine Aktualisierungsrate konfigurieren, die angibt, wie oft der Index für neue Uploads oder Löschvorgänge in Minuten aktualisiert wird. Weitere Informationen finden Sie unter JSON-Suchindex für JSON-Dokumente in Dateien erstellen.

Die folgenden Objekte werden beim Erstellen eines JSON-Suchindex erstellt:

  • Ein JSON-Suchindex index_name in den Object Storage-JSON-Dateien.

  • Eine lokale Tabelle INDEX_NAME$TXTIDX. Diese Tabelle ist die Zuordnungstabelle zwischen Ihren Dokumenten in den Dateien in Object Storage und dem JSON-Suchindex, der in der Datenbank erstellt wird. Weitere Informationen finden Sie unter Referenztabelle für JSON-Suchindex.

  • Eine Ansicht mit dem Standardnamen INDEX_NAME. Sie können die Ansicht verwenden, um eine Suche mit JSON_TEXTCONTAINS auszuführen. Diese Ansicht wird über der Tabelle INDEX_NAME$TXTIDX erstellt. Weitere Informationen finden Sie unter Referenzansicht für JSON-Suchindex.

  • Eine Fehlerlogtabelle mit dem Standardsuffix index_name$txtidx_err. Weitere Informationen finden Sie unter Fehlerlogtabelle.

Der Vorgang zum Erstellen des JSON-Suchindex wird in der Ansicht ALL_SCHEDULER_JOB_RUN_DETAILS protokolliert. Weitere Informationen finden Sie unter Textindexerstellung überwachen.

Autonomous Database unterstützt die Erstellung von JSON-Suchindizes für eine Vielzahl von Textdateien, die JSON-Dokumente enthalten. Beispiel: Sie können JSON-Dateien sowohl im komprimierten als auch im unkomprimierten Format indizieren oder ein anderes JSON-Dokumenttrennzeichen auswählen. Weitere Informationen zu den Optionen für die Dateiverarbeitung finden Sie unter DBMS_CLOUD Package.

Weitere Informationen finden Sie unter Mit Oracle Text indexieren.

JSON-Suchindex für JSON-Dokumente in Dateien erstellen

Verwenden Sie DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX, um einen JSON-Suchindex für die in Object Storage gespeicherten JSON-Dateien zu erstellen.

Weitere Informationen zu Stoppwörtern in Oracle Text 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 JSON-Suchindex für die Objektspeicherdateien zu erstellen.
    
    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 diesem Beispiel wird Folgendes erstellt:
    • Ein JSON-Suchindex VNCLOGS in den Object Storage-Dateien, der sich unter der im Parameter location_uri angegebenen URI befindet.

    • Eine lokale Tabelle VNCLOGS$TXTIDX. Weitere Informationen finden Sie unter Referenztabelle für JSON-Suchindex.

    • Eine View mit dem Namen VNCLOGS. Diese Ansicht wird über der Tabelle VNCLOGS$TXTIDX erstellt. Sie können die Ansicht verwenden, um eine Suche mit JSON_TEXTCONTAINS auszuführen. Weitere Informationen finden Sie unter Referenzansicht für JSON-Suchindex.

    • Eine Fehlerlogtabelle mit dem Namen VNC$TXTIDX_ERR. Die Tabelle enthält eine Liste der ungültigen JSON-Dokumente in Ihren Dateien. Weitere Informationen finden Sie unter Fehlerlogtabelle.

    Nachdem Sie den JSON-Suchindex erstellt haben, können Sie die Ansicht VNCLOGS abfragen. Beispiel:

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

    Diese Abfrage gibt die Logdetails für die angegebenen IP-Adressen in der JSON_TEXTCONTAINS-Bedingung zurück. Beachten Sie, dass die JSON-Suchindexkriterien in der Spalte file_line_json, der indizierten Spalte in der JSON-Suchindextabelle in der Datenbank angegeben sind, während die JSON-Dokumente direkt aus Object Storage gestreamt werden, dargestellt durch die Spalte data. Die Spalte data enthält den Inhalt der Object Storage-Datei.

    Weitere Informationen finden Sie unter Prozedur CREATE_EXTERNAL_TEXT_INDEX.

JSON-Suchindex löschen

Verwenden Sie die Prozedur DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX, um einen JSON-Suchindex für die in Object Storage gespeicherten JSON-Dateien zu löschen.

Beispiel:

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

In diesem Beispiel wird der JSON-Suchindex VCNLOGS gelöscht.

Weitere Informationen finden Sie unter Prozedur DROP_EXTERNAL_TEXT_INDEX.

JSON-Suchindexerstellung überwachen

Wenn Sie DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX ausführen, wird der Vorgang zum Erstellen des JSON-Suchindex 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.

Referenztabelle für JSON-Suchindex

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 JSON_TEXTCONTAINS nach einer Zeichenfolge zu suchen. Beispiel: Wenn Sie die DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX-Prozedur als INDEX_NAME-Wert als VNCLOGS aufrufen, wird die JSON-Suchindexreferenztabelle VNCLOGS$TXTIDX erstellt.

Die Referenztabelle für den JSON-Suchindex enthält die folgenden Spalten:
  • object_name: ist der Dateiname im Object Storage, der die gesuchte Textzeichenfolge enthält.

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

  • length: ist die Länge des JSON-Dokuments.

  • offset: ist der Byte-Offset am Anfang der Datei.

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

Führen Sie die folgende Abfrage aus, um den Objektnamen, den Objektpfad, den Offset und die Länge aus der JSON-Suchindexreferenztabelle abzurufen:
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;
 

Diese Abfrage enthält interne Informationen darüber, wo sich in Ihren Dateien in Object Storage die relevanten Dokumente befinden. Die Abfrage enthält keine tatsächlichen Dokumente.

Um die Dokumente direkt abzurufen, verwenden Sie die folgende Abfrage:

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;
 

Referenzansicht für JSON-Suchindex

Eine Ansicht mit dem Namen INDEX_NAME wird erstellt, wenn Sie DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX ausführen, um einen JSON-Index zu erstellen.

Die Ansicht selbst enthält keine Daten. Die Daten werden in der View abgerufen, wenn Sie die View INDEX_NAME mit der SQL-Bedingung JSON_TEXTCONTAINS abfragen.

Spalte Beschreibung
OBJECT_NAME

Der Dateiname im Object Storage, der die gesuchte Textzeichenfolge enthält.

OBJECT_PATH

Der Objektspeicher-Bucket oder die Ordner-URI, der/die die Objektspeicherdatei enthält.

LENGTH

Die Länge des JSON-Dokuments.

OFFSET

Der Byte-Offset am Anfang der Datei.

DATA

Der Inhalt der Object Storage-Datei.

FILE_LINE_JSON

Die Spalte, auf der die JSON_TEXTCONTAINS ausgeführt wird.

MTIME

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

Fehlerlogtabelle

Eine Fehlerlogtabelle index_name$txtidx_err wird erstellt, wenn Sie einen JSON-Suchindex für die in Object Storage gespeicherten JSON-Dateien erstellen.

Die Tabelle enthält eine Liste der ungültigen JSON-Dokumente in Ihren Dateien. Ein JSON-Dokument ist als ungültig markiert, wenn die Länge der indexierten Quelldatei den Standardwert oder den angegebenen Wert überschreitet. Der Standardwert ist 32767 Byte, und der Höchstwert, den Sie mit der Option json_index_doc_len format angeben können, ist 200000 Byte. Weitere Informationen finden Sie unter JSON-Suchindex für JSON-Dokumente in Dateien erstellen.

Sie können die index_name$txtidx_err abfragen, um die Liste der ungültigen JSON-Dateien abzurufen, die während der Indexerstellung gemeldet wurden.

Spalte Beschreibung
OBJECT_NAME Der Dateiname im Object Storage, der die gesuchte Textzeichenfolge enthält.
OBJECT_PATH Der Objektspeicher-Bucket oder die Ordner-URI, der/die die Objektspeicherdatei enthält.
OFFSET Byte-Offset am Zeilenanfang.
LENGTH Länge des JSON-Dokuments.
LINE_NUMBER Zeilennummer in der Datei im Objektspeicher.