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

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を実行すると内部的に作成されます。

INDEX_NAME$TXTIDX表を問い合せると、CONTAINSキーワードを使用して文字列を検索できます。たとえば、INDEX_NAME値をEMPとしてDBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXプロシージャをコールすると、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プロシージャを参照してください。