3.2 Oracle Textの索引付けの考慮事項

Oracle Textの索引を作成するには、CREATE INDEX文を使用します。索引の作成時にパラメータ文字列を指定しないと、索引は、デフォルトのパラメータを使用して作成されます。CONTEXT索引、CTXCAT索引またはCTXRULE索引を作成できます。

また、デフォルトを変更し、問合せアプリケーションにあわせて索引をカスタマイズできます。CREATE INDEX文で索引をカスタマイズするために使用するパラメータとプリファレンスのタイプは、次の一般的なカテゴリに分類されます。

この項では、次の項目について説明します。

3.2.1 テキストの場所

テキスト問合せアプリケーションの基本的な前提条件は、ドキュメント・コレクションが移入されたテキスト表です。このテキスト表は索引付けに必要です。

CONTEXT索引を作成する場合、次の要素のいずれかを使用して、テキスト表に行を移入します。CTXCAT索引およびCTXRULE索引は最初のメソッドのみをサポートします。

  • テキスト情報(ドキュメントまたはテキスト断片。デフォルトでは、索引付け操作は、ドキュメント・テキストが直接テキスト表にロードされるものとして動作します。)

  • ファイル・システムにあるドキュメントのパス名

  • WebドキュメントのURL

図3-2は、これらの方法を示しています。

図3-2 様々なテキスト格納方法

図3-2の説明が続きます
「図3-2 様々なテキスト格納方法」の説明

3.2.2 サポートされている列タイプ

Oracle Textでは、VARCHAR2CLOB (制限4294967295バイトまで)、BLOBCHARBFILEXMLTypeおよびURIType型の列を使用して、CONTEXT索引を作成できます。

ノート:

NCLOBおよびDATEおよびNUMBERの列型は索引付けできません。

3.2.3 テキスト表へのテキストの格納

CONTEXTデータ・ストレージの場合、これらのデータストア・タイプを使用して、テキスト表にドキュメントを格納します。

  • DIRECT_DATASTORE: 1つの列

  • MULTI_COLUMN_DATASTORE: 複数の列(Oracle Textでは、各行に1つのドキュメントになるように、列を連結して仮想ドキュメントにします。)

  • DETAIL_DATASTORE: プライマリ/詳細関係(1つのドキュメントを複数の行に格納します。)

  • NESTED_DATASTORE: ネストした表

Oracle Textでは、XMLドキュメントの格納に使用するXMLTypeデータ型の索引付けをサポートしています。

CTXCATデータ記憶域では、名前や説明、アドレスといった短いテキスト断片を多数の列に格納できます。CTXCAT索引は、複合問合せのパフォーマンスを改善します。

3.2.4 ファイルのパス名の格納

テキスト表には、ファイル・システムに格納されているファイルのパス名を格納します。索引付け時には、DIRECTORY_DATASTOREプリファレンス型を使用します。このデータ格納方法は、CONTEXT索引でのみサポートされています。

ノート:

Oracle Database 19c以降、Oracle TextのFILE_DATASTORE型は非推奨になりました。かわりに、DIRECTORY_DATASTOREを使用してください。

FILE_DATASTOREテキスト索引を、Oracle Database 19c以降で使用可能なDIRECTORY_DATASTORE索引タイプに置き換えることをお薦めします。DIRECTORY_DATASTOREにより、ディレクトリ・オブジェクトに基づいたファイル・アクセスが可能になるため、セキュリティが強化されます。

3.2.5 URLの格納

URL名を格納してWebサイトを索引付けします。索引付け時には、NETWORK_DATASTOREプリファレンス型を使用します。このデータ格納方法は、CONTEXT索引でのみサポートされています。

ノート:

Oracle Database 19c以降、Oracle TextのURL_DATASTORE型は非推奨になりました。かわりに、NETWORK_DATASTOREを使用してください。

URL_DATASTORE型は、インターネット上のファイル(HTTPまたはFTPを介してアクセス)に格納されているテキスト、およびローカル・ファイル・システムのファイル(ファイル・プロトコルを介してアクセス)に格納されているテキストに使用されます。NETWORK_DATASTOREに置き換えられ、ACLを使用した特定のサーバーへのアクセスが可能になります。この変更により、Oracle Textは、データベースからURLにアクセスするための標準的な操作およびセキュリティ・モデルにさらに近づいています。

3.2.6 関連するドキュメント情報の格納

テキスト表に列を追加して、問合せアプリケーションで必要な、主キー、日付、説明または作成者などの構造化情報を格納します。

3.2.7 形式列と文字セット列

ドキュメントが複合形式または複合文字セットで構成されている場合は、次の列を追加します。

  • 索引付け時のフィルタ処理に必要な形式(TEXTまたはBINARY)を記録する形式列。形式列をIGNOREに設定すると、索引付け時に無視する行を指定できます。IGNOREは、Oracle Textの索引付けと互換性のないイメージなどのデータが含まれた行をバイパスする場合に役立ちます。

  • 行ごとにドキュメントの文字セットを記録する文字セット列。

索引の作成時に、形式列または文字セット列の名前を、CREATE INDEXのPARAMETERS句に指定します。

文字セット列または言語列にAUTOまたはAUTOMATICキーワードが含まれるすべての行について、Oracle Textは統計的手法を適用して、ドキュメントの文字セットおよび言語を判断し、ドキュメントの索引付けを適切に変更します。

3.2.8 サポートされているドキュメント形式

システムでは、HTML、PDF、Microsoft Wordおよびプレーン・テキストを含むほとんどのドキュメント形式を索引付けできるため、ユーザーはサポートされている任意のドキュメント・タイプをテキスト列にロードできます。

テキスト列に複合形式がある場合は、索引付けの際にフィルタ処理するのに役立つ形式列を含めることができ、ドキュメントがBINARY (形式設定済)かそれともTEXT (HTMLなど、形式未設定)かを指定できます。HTMLドキュメントとXMLドキュメントを1つの索引に使用する場合、ニーズにあわせて索引を構成できない場合があります。スタイルシート情報が索引に追加されないようにすることはできません。

関連項目:

サポートされているドキュメント形式の詳細は、『Oracle Textリファレンス』を参照してください。

3.2.9 DATASTOREタイプの要約

CREATE INDEXを使用するときに、データストア・プリファレンスを使用する場所を指定します。使用しているアプリケーションに従って適切なデータストアを使用します。

データストア・プリファレンス型を使用してテキストを格納する様々な方法を次に示します。

表3-2 DATASTOREタイプの要約

データストア・タイプ 使用する状況

DIRECT_DATASTORE

データをテキスト列に内部的に格納する場合。各行は単一のドキュメントとして索引付けされます。

テキスト列には、VARCHAR2、CLOB、BLOB、CHARまたはBFILEを使用できます。XMLType列は、CONTEXT索引タイプでサポートされています。

MULTI_COLUMN_DATASTORE

データをテキスト表の複数の列に格納する場合。列が連結され、各行に1つずつ仮想ドキュメントが作成されます。

DETAIL_DATASTORE

データをテキスト列に内部的に格納する場合。ドキュメントがディテール表のテキスト列にある1つ以上の行で構成され、ヘッダー情報はプライマリ表に格納されます。

FILE_DATASTORE

データをオペレーティング・システム・ファイルに外部的に格納する場合。ファイル名が、テキスト列の各行に1つずつ格納されます。

ノート:

Oracle Database 19c以降、Oracle TextのFILE_DATASTORE型は非推奨になりました。かわりに、DIRECTORY_DATASTOREを使用してください。

DIRECTORY_DATASTORE

データはOracleディレクトリ・オブジェクトの外部に格納されます。ファイル名が、テキスト列の各行に1つずつ格納されます。

NESTED_DATASTORE

データをネストした表に格納する場合。

URL_DATASTORE

データをイントラネットまたはインターネット上にあるファイルに外部的に格納する場合。URLはテキスト列に格納されます。

ノート:

Oracle Database 19c以降、Oracle TextのURL_DATASTORE型は非推奨になりました。かわりに、NETWORK_DATASTOREを使用してください。

NETWORK_DATASTORE

データをイントラネットまたはインターネット上にあるファイルに外部的に格納する場合。URLはテキスト列に格納されます。

USER_DATASTORE

ドキュメントが、索引付け時にユーザー定義ストアド・プロシージャによって合成されます。

URLの索引付けの場合、索引付け時間とドキュメントの取出し時間が長くなります。これは、システムがネットワークからドキュメントを取り出す必要があるためです。

ノート:

トリガーとMULTI_COLUMN_DATASTOREまたはUSER_DATASTOREの問題をトラブルシューティングする場合は、My Oracle Supportドキュメント1613741.1を参照してください。

3.2.10 ドキュメント形式とフィルタ処理

Microsoft WordやPDFなどの書式設定されたドキュメントを索引付けするには、テキストにフィルタ処理する必要があります。FILTERプリファレンス・タイプにより、システムで使用されるフィルタ処理のタイプが決まります。デフォルトでは、ドキュメントの形式が自動的に検出され、それらをテキストにフィルタリングするAUTO_FILTERフィルタ型が使用されます。

Oracle Textでは、ほとんどの形式を索引付けできます。また、複合形式のドキュメントを含む列も索引付けできます。

関連項目:

AUTO_FILTERでサポートされているドキュメントとグラフィック形式の詳細は、『Oracle Textリファレンス』を参照してください

3.2.10.1 フィルタ処理が不要なHTML

HTMLやプレーン・テキストのファイルを索引付けする場合は、AUTO_FILTER型を使用しないでください。最も効率のよい方法として、NULL_FILTERプリファレンス型を使用します。

3.2.10.2 複合形式列のフィルタ処理

Microsoft Word、プレーン・テキストおよびHTMLのドキュメントを含む列などの複合形式列の場合は、テキスト表に形式列を組み込んで、プレーン・テキストやHTMLのフィルタ処理をバイパスできます。形式列で、各行にTEXTまたはBINARYのタグを付けます。TEXTタグを付けた行は、フィルタ処理されません。

たとえば、HTMLおよびプレーン・テキストの行にTEXTタグを付け、Microsoft Wordの行にBINARYタグを付けます。その形式列をCREATE INDEXのPARAMETERS句で指定します。

ドキュメントが索引付けされないようにする場合は、第3の形式列タイプIGNOREを使用できます。この列タイプは、たとえば、複合形式の表に日本語と英語のプレーン・テキスト・ドキュメントが含まれているものの、英語のドキュメントのみを処理する場合に便利です。この列タイプは、複合形式の表にプレーン・テキスト・ドキュメントとイメージが含まれている場合にも便利です。IGNOREはデータストア・レベルで実装されるため、すべてのフィルタとともに使用できます。

3.2.10.3 カスタム・フィルタ処理

カスタム・フィルタを作成し、ドキュメントをフィルタ処理して索引付けできます。ファイル・システムから実行する外部フィルタ、またはPL/SQLやJavaストアド・プロシージャのような内部フィルタのいずれも作成できます。

外部カスタム・フィルタ処理を行う場合は、USER_FILTERフィルタ・プリファレンス型を使用します。

内部フィルタ処理を行う場合は、PROCEDURE_FILTERフィルタ型を使用します。

関連項目:

PROCEDURE_FILTER例

3.2.11 行のバイパス

テキスト表では、イメージ・データを含む行など、索引付けしない行をバイパスできます。行をバイパスするには、形式列を作成し、それをIGNOREに設定して、CREATE INDEX文のパラメータ句で形式列の名前を指定します。

3.2.12 ドキュメントの文字セット

索引付けエンジンは、フィルタ処理済のテキストを、データベース文字セットであるとみなします。AUTO_FILTERフィルタ型を使用すると、書式設定されたドキュメントは、データベース文字セットでテキストに変換されます。

ソースがテキストで、ドキュメント文字セットがデータベース文字セットでない場合は、AUTO_FILTERフィルタ型を使用して索引付けのためにテキストを変換できます。

文字セットの検出

CHARSET列がAUTOに設定されている場合、AUTO_FILTERフィルタは、ドキュメントの文字セットを検出し、相違点がある場合は、検出された文字セットをデータベース文字セットに変換します。

複合文字セット列

ドキュメント・セットに文字セットが異なるドキュメント(JA16EUCやJA16SJISなど)が含まれている場合、ドキュメントを索引付けできます。たとえばCHARSET列を作成したとすると、この列に各行のドキュメント文字セット名を指定して、CREATE INDEX文のパラメータ句で列の名前を指定します。