オブジェクト・ストレージのファイルでの全文検索の使用
PL/SQLパッケージDBMS_CLOUDを使用すると、オブジェクト・ストア・ファイルにテキスト索引を作成できます。これにより、テキストを検索し、検索でワイルドカードを使用できます。
オブジェクト・ストレージのファイルの全文検索について
オブジェクト・ストレージ内のファイルにテキスト索引を作成できます。テキスト索引を使用すると、オブジェクト・ストア内の非常に大きなデータ・セットに対して単語ベースの検索を実行できます。
DBMS_CLOUDは、オブジェクト・ストア内のデータを迅速かつ効率的に管理する方法を提供します。DBMS_CLOUD APIを使用すると、オブジェクト・ストアに存在するファイルを作成、コピー、ダウンロード、削除およびトラバースできます。外部表を定義する場合、オブジェクト・ストアに格納されているデータ(またはハイブリッド・パーティション外部表、データベース内のデータおよびオブジェクト・ストア内のデータ)に対してSQL問合せを実行できます。DBMS_CLOUDを使用してテキスト索引を定義すると、データでテキストを検索し、ワイルドカードを使用できます。
ワードベース検索の自律型AIデータベース・サポートは、CSVやJSONなど、一般的に使用されるデータ形式、およびPDFやDOC (MS Word)形式などのフォーマット済ドキュメント(バイナリ)で動作します。新しいアップロードまたは削除に対して索引がリフレッシュされる頻度(分)を示すリフレッシュ率を構成できます。
オブジェクト・ストレージに索引を作成すると、標準の接尾辞INDEX_NAME$TXTIDXを持つローカル表が作成され、その表を利用してCONTAINSキーワードを使用して検索を実行できます。
詳細は、「Oracle Textを使用した索引付け」を参照してください。
オブジェクト・ストレージ・ファイルに対するテキスト索引の作成
DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXを使用して、オブジェクト・ストレージ内のファイルにテキスト索引を作成します。
DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXでbinary_files formatオプションを指定すると、フォーマットされたドキュメント(バイナリ)がサポートされます。
DBMS_CLOUD.CREATE_EXTERNAL_TEXT_INDEXで stop_words formatオプションを指定すると、ストップワードリストを含めることができます。
Oracle Textストップ・ワードおよびバイナリ・ファイルの操作の詳細は、「Oracle Textを使用した索引付け」を参照してください。
-
ソースの場所にアクセスするための資格証明オブジェクトを作成します。
詳細は、「CREATE_CREDENTIALプロシージャ」を参照してください。
-
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 AI 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_nameにWHERE句を指定した次の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プロシージャを参照してください。