LoginSignup
0
0

More than 1 year has passed since last update.

[Oracle Cloud] Object Storage上のドキュメントをOracle Textで全文検索してみた (2023/01/08)

Last updated at Posted at 2023-01-08

Oracle Cloud Infrastructure(OCI)のOracle Databaseサービスの1つ、Autonoous DatabaseでOCI Object Storageバケット内のファイルに対してOracle Textの全文検索索引を作成し、全文検索してみた。

前提条件

  • OCI Object Storageバケットに対象ファイルを配置
  • Autonomous Databaseでクレデンシャルの作成

Object StorageファイルにOracle Text索引を作成

Object Storage内のファイルにOracle Text索引を作成するためにDBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEX 使用します。

  • パラメータcredential_name:クレデンシャルを指定します。
  • パラメータlocation_uri:指定された URI にあるObject StorageファイルにOracle Text索引を作成します。
  • パラメータindex_name;索引名を指定します。
  • パラメータformatのrefresh_rateオプション:索引更新間隔(分)を指定します。
begin
    dbms_cloud.create_external_text_index (
        credential_name => 'DEF_CRED_NAME',
        location_uri    => 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<namespace>/b/<bucket名>/o/',
        index_name      => 'mydocs',
        format          => JSON_OBJECT('refresh_rate' value '10')
    );
end;
/

これにより、東京リージョンの namespacebucket名のバケットに対してOracle Text索引が作成されます。
Database Object(Oracle Text索引参照表)としては、mydocs$TXTIDX(index_name$TXTIDX)テーブルが作成され、CONTAINSを使用して検索を実行できます。
このOracle Text索引は10分間隔でリフレッシュされます。

Oracle Text索引参照表

DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXを実行することで作成されるOracle Text索引参照表(Index_name$TXTIDX)には次の列があります。

  • mtime:Object Storageファイルの最終変更タイムスタンプです。これは、DBMS_CLOUDが最後にファイルにアクセスした時刻です。
  • object_name:Object Storage上のファイル名です。
  • object_path:Object Storage上のファイルを含むObject Storageバケットの URI です。

全文検索の実施

索引付けが完了したオブジェクト(ファイル)の確認

Oracle Text索引参照表:mydocs$TXTIDXテーブル を検索すると 索引付けが完了したファイルを確認できます。

select * from mydocs$txtidx

image.png

全文検索

「日本語」という文字列を含むファイルの検索

select * from mydocs$txtidx where contains (object_name, '日本語') > 0;

image.png

「ホワイト」という文字列を含むファイルの検索

select * from mydocs$txtidx where contains (object_name, 'ホワイト') > 0;

image.png

作成したOracle Text索引の削除

Object Storageファイルに対するOracle Text索引を削除するには DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEXを使用します。

  • パラメータindex_name:索引名を指定します。
BEGIN 
DBMS_CLOUD.DROP_EXTERNAL_TEXT_INDEX (
        index_name => 'mydocs'
);
END;
/

Oracle Text索引作成の監視

DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXでOracle Text索引を作成すると、ALL_SCHEDULER_JOB_RUN_DETAILSビューにログが記録されます。
ALL_SCHEDULER_JOB_RUN_DETAILSビューを照会して、索引作成ジョブによって報告されたステータスとエラーを取得できます。

DBMS_SCHEDULERジョブの名前は、index_name$JOBです。

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

STATUS    ADDITIONAL_INFO 
--------- --------------- 
SUCCEEDED                 
SUCCEEDED                 
SUCCEEDED                 
SUCCEEDED                 
SUCCEEDED                 

5行が選択されました。

Database Actions のスケジュールでも確認できます。
image.png

image.png

おわりに

Autonomous DatabaseからObject Storageのファイルに対してOracle Textを使った全文検索ができました。
記事執筆時点(2023/01/08)ではAutonomous Database以外のOracle Database 19c の DBMS_CLOIDパッケージには CREATE_EXTERNAL_TEXT_INDEX プロシージャがありませんでした。

参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0