JSON-Suche für Dokumente in Object Storage verwenden

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

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 Ihnen die regelmäßige sowie die Volltextsuche für Ihre Dokumente oder Fragmente Ihrer Dokumente mit JSON_TEXTCONTAINS.

Weitere Informationen finden Sie unter JSON_TEXTCONTAINS-Bedingung.

Mit DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX können Sie einen JSON-Suchindex für Dateien in Object Storage erstellen. 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 erstellt, wenn Sie einen JSON-Suchindex erstellen:

  • Ein JSON-Suchindex index_name für die 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 in der Datenbank erstellten JSON-Suchindex. Weitere Informationen finden Sie unter Referenztabelle für JSON-Suchindex.

  • Eine Ansicht mit dem Standardnamen INDEX_NAME. Mit der Ansicht können Sie eine Suche mit JSON_TEXTCONTAINS ausführen. Diese Ansicht wird über der Tabelle INDEX_NAME$TXTIDX erstellt. Weitere Informationen finden Sie unter Referenzansicht des JSON-Suchindexes.

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

Der JSON-Suchindexerstellungsvorgang wird in der View 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 indexieren oder ein anderes JSON-Dokumenttrennzeichen auswählen. Weitere Informationen zu den Optionen zur 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 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 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 für die Object Storage-Dateien, die sich unter der im Parameter location_uri angegebenen URI befinden.

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

    • Eine Ansicht mit dem Namen VNCLOGS. Diese Ansicht wird über der Tabelle VNCLOGS$TXTIDX erstellt. Mit der Ansicht können Sie eine Suche mit JSON_TEXTCONTAINS ausführen. Weitere Informationen finden Sie unter Referenzansicht des JSON-Suchindexes.

    • 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 View VNCLOGS abfragen. Beispiele:

    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 Bedingung JSON_TEXTCONTAINS 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 werden, 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.

Beispiele:

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 Erstellungsvorgang für den JSON-Suchindex in der View 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.

Referenztabelle für JSON-Suchindex

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 JSON_TEXTCONTAINS nach einer Zeichenfolge zu suchen. Beispiel: Wenn Sie die Prozedur DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX mit dem Wert INDEX_NAME als VNCLOGS aufrufen, wird die Referenztabelle für den JSON-Suchindex VNCLOGS$TXTIDX erstellt.

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

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

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

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

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

Führen Sie die folgende Abfrage aus, um den Objektnamen, den Objektpfad, den Offset und die Länge aus der Referenztabelle des JSON-Suchindex 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 die relevanten Dokumente in Ihren Dateien in Object Storage befinden. Die Abfrage liefert 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 View mit dem Namen INDEX_NAME wird erstellt, wenn Sie DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX ausführen, um einen JSON-Index zu erstellen.

Die View 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 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, in der die JSON_TEXTCONTAINS ausgeführt wird.

MTIME

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

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 wird als ungültig gekennzeichnet, wenn die Länge der indexierten Quelldatei den Standardwert oder den angegebenen Wert überschreitet. Der Standardwert ist 32767 Byte, und der maximale Wert, den Sie mit der Option json_index_doc_len format angeben können, ist 200000 Byte. Weitere Informationen finden Sie unter JSON-Suchindex in JSON-Dokumenten in Dateien erstellen.

Sie können die index_name$txtidx_err abfragen, um die Liste der ungültigen JSON-Dateien abzurufen, die bei 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 Objektspeicherdatei enthält.
OFFSET Byte-Offset vom Anfang der Zeile.
LENGTH Länge des JSON-Dokuments.
LINE_NUMBER Zeilennummer in der Datei im Objektspeicher.