オブジェクト・ストレージのファイルでの全文検索の使用

PL/SQLパッケージDBMS_CLOUDを使用すると、オブジェクト・ストア・ファイルにテキスト索引を作成できます。これにより、テキストを検索し、検索でワイルドカードを使用できます。

オブジェクト・ストレージのファイルの全文検索について

オブジェクト・ストレージ内のファイルにテキスト索引を作成できます。テキスト索引を使用すると、オブジェクト・ストア内の非常に大きなデータ・セットに対して単語ベースの検索を実行できます。

DBMS_CLOUDは、オブジェクト・ストア内のデータを迅速かつ効率的に管理する方法を提供します。DBMS_CLOUD APIを使用すると、オブジェクト・ストアに存在するファイルを作成、コピー、ダウンロード、削除およびトラバースできます。外部表を定義するときに、オブジェクト・ストアに格納されているデータ(またはハイブリッド・パーティション化された外部表、データベースおよびオブジェクト・ストアのデータ)に対してSQL問合せを実行できます。DBMS_CLOUDを使用してテキスト索引を定義すると、データを検索してテキストを検索し、ワイルドカードを使用できます。

Autonomous Databaseのワードベース検索のサポートは、CSVやJSONなど、一般的に使用されるデータ形式、およびPDFやDOC (MS Word)形式などのフォーマット済ドキュメント(バイナリ)で機能します。新しいアップロードまたは削除に対して索引がリフレッシュされる頻度(分)を示すリフレッシュ率を構成できます。

オブジェクト・ストレージに索引を作成すると、標準の接尾辞INDEX_NAME$TXTIDXを持つローカル表が作成され、その表を利用してCONTAINSキーワードを使用して検索を実行できます。

詳細は、Oracle Textによる索引付けを参照してください。

オブジェクト・ストレージ・ファイルに対するテキスト索引の作成

DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXを使用して、オブジェクト・ストレージ内のファイルにテキスト索引を作成します。

DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXbinary_files formatオプションを指定すると、フォーマット済ドキュメント(バイナリ)がサポートされます。

DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXstop_words formatオプションを指定すると、ストップ・ワード・リストを含めることができます。

Oracle Textのストップ・ワードおよびバイナリ・ファイルの操作の詳細は、Oracle Textによる索引付けを参照してください。

  1. ソースの場所にアクセスするための資格証明オブジェクトを作成します。

    詳細は「CREATE_CREDENTIALプロシージャ」を参照してください。

  2. DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXプロシージャを実行して、オブジェクト・ストレージ・ファイルにテキスト索引を作成します。
    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;
    /

    この例では、location_uriパラメータで指定されたURIにあるオブジェクト・ストレージ・ファイルにテキスト索引EMPを作成します。formatパラメータのrefresh_rateオプションは、索引EMPを10分間隔でリフレッシュすることを指定します。

    これにより、ローカル表INDEX_NAME$TXTIDXが作成されます。表INDEX_NAME$TXTIDXを使用して、CONTAINSを使用して検索を実行できます。

    たとえば:

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

    この問合せは、文字列kingを含むオブジェクト名またはファイル名を戻します。

    詳細は、テキスト索引のリファレンス表を参照してください。

    EXTERNAL MODIFY句を使用して外部表を問い合せて、実際のレコードを取得できます。

    
    SELECT * FROM EMPEXTTAB EXTERNAL MODIFY ((location_url object_name));
    
    ノート

    外部表EMPEXTTABは、同じlocation_urlに作成されるサンプルの外部表です。

    詳細は、Autonomous Databaseでの外部データの問合せを参照してください。

    詳細は、CREATE_EXTERNAL_TEXT_INDEXプロシージャを参照してください。

    詳細は、リソースにアクセスするためのポリシーとロールの構成を参照してください。

クラウド・ストレージ・ファイルの索引の削除

DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEXプロシージャを使用して、オブジェクト・ストレージ・ファイルのテキスト索引を削除します。

DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEXプロシージャを実行して、オブジェクト・ストレージ内のファイルのテキスト索引を削除します。

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

この例では、EMPテキスト索引を削除します。

詳細は、DROP_EXTERNAL_TEXT_INDEXプロシージャを参照してください。

テキスト索引参照表

ローカル表は、標準の接尾辞INDEX_NAME$TXTIDXを使用してデータベース内に作成されます。この表は、DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXの実行時に内部的に作成されます。

CONTAINSキーワードを使用して、INDEX_NAME$TXTIDX表を問い合せて文字列を検索できます。たとえば、DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXプロシージャでINDEX_NAME値をEMPとしてコールすると、テキスト参照表のEMP$TXTIDXが作成されます。

テキスト参照表には次の列があります。
  • object_name: 検索されたテキスト文字列を含むオブジェクト・ストレージ上のファイル名です。

  • object_path: オブジェクト・ストレージ・ファイルを含むオブジェクト・ストレージ・バケットまたはフォルダURIです。

  • mtime: オブジェクト・ストレージ・ファイルの最終変更タイムスタンプです。これは、ファイルがDBMS_CLOUDによって最後にアクセスされた時刻です。

たとえば:
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

この問合せは、テキスト文字列kingを含むオブジェクト・ストレージ上のファイル名および場所URIを大文字または小文字で返します。

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

この問合せは、索引EMPが作成されたオブジェクト・ファイルのファイル名と最終変更タイムスタンプを返します。

テキスト索引作成のモニター

DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXを実行すると、テキスト索引作成操作がALL_SCHEDULER_JOB_RUN_DETAILSビューに記録されます。

ALL_SCHEDULER_JOB_RUN_DETAILSビューを問い合せて、索引作成ジョブによってレポートされたステータスおよびエラーを取得できます。

DBMS_SCHEDULERジョブの名前は、DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXをコールするときに指定したINDEX_NAMEパラメータから導出されます。

ALL_SCHEDULER_JOB_RUN_DETAILSビューを問い合せるには、ADMINユーザーとしてログインするか、ALL_SCHEDULER_JOB_RUN_DETAILSビューに対するREAD権限を持っている必要があります。

たとえば、job_nameWHERE句を指定した次のSELECT文は、ジョブの実行詳細を示します。

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

索引作成スケジューラ・ジョブが存在するかどうかを問い合せることもできます。

たとえば:
SELECT status 
    FROM all_scheduler_jobs where LOWER(job_name) = LOWER('index_name$JOB');

詳細は、CREATE_EXTERNAL_TEXT_INDEXプロシージャを参照してください。