3.1 Oracle Text索引について
ここでは、Oracle Textの索引のタイプ、索引の構造、索引付け処理および制限事項について説明します。
次の各トピックで、Oracle Textの索引の詳細を説明します。
3.1.1 Oracle Textの索引タイプ
Oracle Textでは、CREATE
INDEX
文を使用して索引を作成します。
表3-1 Oracle Textの索引タイプ
索引タイプ | 説明 | サポートされるプリファレンスとパラメータ | 問合せ演算子 | ノート |
---|---|---|---|---|
|
テキストが、MS WordやHTML、プレーン・テキストといった形式の大量のまとまったドキュメントで構成されている場合、テキスト検索アプリケーションを作成するには、この索引を使用します。 様々な方法で索引をカスタマイズできます。 この索引のタイプは、元表への挿入、更新および削除操作の後に |
サポートされているパラメータ: 索引パーティション句の形式列、文字セット列および言語列 |
|
すべてのドキュメント・サービスと問合せサービスがサポートされています。 パーティション・テキスト表の索引付けがサポートされています。
|
|
テキストが、MS WordやHTML、プレーン・テキストといった形式の大量のまとまったドキュメントで構成されている場合、テキスト検索アプリケーションを作成するには、この索引を使用します。 様々な方法で索引をカスタマイズできます。 この索引のタイプは、元表への挿入、更新および削除操作の後に |
サポートされているパラメータ: 索引パーティション句の形式列、文字セット列および言語列 |
|
すべてのドキュメント・サービスと問合せサービスがサポートされています。 パーティション・テキスト表の索引付けがサポートされています。 索引記憶域表について、シャードされたデータベースおよびシステム管理パーティション化がサポートされています。 |
|
この索引は、小さいドキュメントやテキスト断片の複合問合せのパフォーマンスを向上させるために使用します。複合問合せのパフォーマンス向上のためには、元表に、品目名や価格、説明といったその他の列を含めます。 この索引タイプはトランザクションです。挿入や更新、削除が元表に対して実行された後、自動的に更新されます。 ノート: Oracle Textの索引タイプ
|
未サポート: 形式列、文字セット列および言語列 表と索引のパーティション化。 |
テーマ問合せがサポートされています。 |
この索引は大きいため、
|
|
ドキュメント分類アプリケーションまたはルーティング・アプリケーションの作成には、この索引を使用します。この索引は、分類またはルーティングの条件が定義されている問合せの表に対して作成します。 |
「CTXRULEパラメータおよび制限事項」を参照してください。 |
|
単純な分類またはルールベースの分類を使用して、ドキュメント分類アプリケーションを作成するには、 |
Oracle Textの索引は、Oracle Databaseのドメイン索引です。問合せアプリケーションを作成するには、テキスト列と構造化データ列の組合せを持つCONTEXT
タイプの索引を作成し、CONTAINS
演算子を使用してその索引を問い合せます。
索引は、移入済のテキスト表から作成します。問合せアプリケーションでは、表にテキストまたは格納済テキストの場所へのポインタが含まれている必要があります。テキストは通常ドキュメントの集まりですが、小さいテキスト断片の場合もあります。
ノート:
XMLデータを使用する新しいアプリケーションを作成する場合は、CTXRULE
ではなくXMLIndex
を使用することをお薦めします。
Oracle Text索引は、標準SQLを使用して、Oracle Databaseの拡張索引の1タイプとして作成します。つまり、Oracle Textの索引は、Oracle Databaseの索引と同じように機能します。この索引には参照名があり、標準SQL文を使用して操作できます。
Oracle Textの索引を作成するメリットは、CONTAINS
、CATSEARCH
およびMATCHES
などの演算子を使用したテキスト問合せの応答時間が短縮されることです。これらの演算子は、それぞれCONTEXT
、CTXCAT
およびCTXRULE
の各索引タイプを問い合せます。
ノート:
透過的なデータ暗号化の可能な列ではドメイン索引はサポートされないため、Oracle Textで使用することはできません。ただし、透過的なデータ暗号化に対応する表領域に格納されている表の列に対しては、Oracle Text索引を作成することができます。
関連項目:
-
XMLIndex
およびXMLType
データの索引付けの詳細は、『Oracle XML DB開発者ガイド』を参照
3.1.2 Oracle TextのCONTEXT索引の構造
Oracle Textでは、すべてのワードをトークンに変換してテキストを索引付けします。Oracle TextのCONTEXT
索引の一般的な構造は、逆向きの索引であり、各トークンにそのトークンを含むドキュメント(行)のリストが格納されています。
たとえば、初期の索引付け操作が1つ終了すると、ワードDOGのエントリは次のようになります。
ワード | ドキュメント内の表示 |
---|---|
DOG |
DOC1 DOC3 DOC5 |
つまり、ワードDOGは、ドキュメント1、3および5を格納する行に含まれています。
マージ済のワードとテーマの索引付け
Oracle Textでは、英語およびフランス語の場合はデフォルトで、ワード情報とともにテーマ情報も索引付けします。テーマ情報は、ABOUT
演算子を使用して問い合せることができます。テーマの索引付けを使用可能および使用禁止に設定することもできます。
関連項目:
テーマ情報の索引付けについてさらに学習するには、「プリファレンスの作成」を参照してください
3.1.3 Oracle Textの索引付け処理
この項では、Oracle Textの索引付け処理について説明します。CREATE
INDEX
文を使用して索引付け処理を開始し、パラメータとプリファレンスに基づいて、トークンに対してOracle Textの索引を作成します。
図3-1は、索引付け処理を示しています。データは、様々な索引付けオブジェクトによって操作されます。各オブジェクトは、CREATE
INDEX
またはALTER
INDEX
のパラメータ文字列で指定した索引付けプリファレンス型またはセクション・グループにそれぞれ対応しています。
Oracle Textは、次のオブジェクトとエンジンを使用してデータ・ストリームを処理します。
3.1.3.1 データストア・オブジェクト
ストリームはデータストアから始まり、データストアでは、指定したデータストア・プリファレンスに従って、システムに格納されているとおりにドキュメントが読み込まれます。
たとえば、データストアをDIRECTORY_DATASTORE
として定義した場合、ストリームはまずOracleディレクトリ・オブジェクトからファイルを読み取ります。ドキュメントは、インターネット上またはOracle Databaseに格納することもできます。ファイルが物理的にどこに存在していても、Oracle Databaseのテキスト表はそのファイルを指している必要があります。
3.1.3.3 セクショナ・オブジェクト
フィルタ処理後、マークアップされたテキストはセクショナを通過し、ストリームはテキスト情報とセクション情報に分割されます。セクション情報には、テキスト・ストリーム内でセクションが開始する場所と終了する場所の情報が含まれています。抽出されるセクションのタイプは、セクション・グループのタイプによって決定されます。
テキストはレクサーに渡されます。セクション情報は、直接索引付けエンジンに渡され、後で使用されます。
3.1.3.4 レクサー・オブジェクト
Oracle Textのレクサー・タイプのいずれかを使用してレクサー・プリファレンスを作成し、索引付けをするテキストの言語を指定します。レクサーは、使用言語に基づいて、テキストをトークンに分解します。通常、分解されたトークンはワードです。レクサーは、トークンの抽出に、レクサー・プリファレンスに定義されたパラメータを使用します。これらのパラメータには、トークンを分割する文字(空白など)の定義が含まれています。パラメータには、テキストをすべて大文字に変換するか、大/小文字混在のままにしておくかも含まれます。
テーマの索引付けを有効にすると、レクサーはテキストを分析してテーマ・トークンを作成し、索引付けを行います。
3.1.4 索引付き列の更新について
索引の同期をすぐに実行することなく、索引が同期されるまで、ドキュメントを検索操作可能な状態に保つことができます。
Oracle Database 12cリリース2 (12.2)より前のリリースでは、Oracle Text索引に基づく列に更新があった場合、インデックスが同期されるまでドキュメントの検索操作は実行できなくなります。ユーザーの問合せではこのドキュメントの検索を実行できません。Oracle Database 12cリリース2 (12.2)より、索引の同期をすぐに実行せずに、更新後にドキュメントを検索可能にする必要があることを指定できるようになりました。索引の同期前に、問合せで古い索引エントリを使用して古いドキュメントの内容をフェッチします。索引の同期化後、ユーザー問合せで更新済ドキュメントの内容をフェッチします。
索引のASYNCHRONOUS_UPDATE
オプションを使用して、更新後にドキュメントの古い内容を維持し、この索引を使用してユーザーの問合せに回答できます。
ノート:
CONTEXT
索引タイプのASYNCHRONOUS_UPDATE
設定は、Oracle Database 23aiで非推奨になり、将来のリリースで無視または削除される可能性があります。
Oracleでは、将来のリリースでこの属性を無視または削除する可能性があります。Oracleでは、この値をデフォルト値SYNCHRONOUS_UPDATE
に設定することをお薦めします。更新時の予期しない結果損失を回避するには、SYNC (ON COMMIT)
またはSYNC(EVERY [time-period])
を短い期間で使用します。
ASYNCHRONOUS_UPDATE
設定は、更新が"delete followed by insert"として実装され、削除が即時(コミット時)であり、挿入が索引同期中にのみ実行されるという事実の回避策として導入されました。ただし、この設定は他のいくつかの索引オプションと互換性がありません。Oracleでは、使用を中止することをお薦めします。
関連トピック
3.1.5 パーティション表とパーティション索引
パーティション・テキスト表にCONTEXT
パーティション索引を作成する際には、範囲により表をパーティション化する必要があります。ハッシュ・パーティション、コンポジット・パーティションおよびリスト・パーティションは、サポートされていません。
日付でデータをパーティション化したパーティション・テキスト表を作成できます。たとえば、使用しているアプリケーションで日付付きのニュース記事の大規模なライブラリをメンテナンスしている場合は、月別または年度別に情報をパーティション化できます。パーティション化によって、問合せ、挿入、更新および削除、ならびにバックアップとリカバリの操作を単一のパーティションに対して行うことができるため、大規模データベースが管理しやすくなります。
複数の表セットを持つローカルのCONTEXT
索引では、Oracle TextはOracle Databaseがサポートする数のパーティションをサポートします。
パーティション表の問合せには、通常の表の問合せと同様に、SELECT
文のWHERE
句でCONTAINS
を使用します。表全体または単一のパーティションを問い合せることができます。ただし、ORDER
BY
SCORE
句を使用する場合は、問合せを単一のパーティションに制限する範囲述語を組み込まないかぎり、単一のパーティションを問い合せることをお薦めします。
3.1.7 パラレル索引付け
Oracle Textでは、CREATE
INDEX
文を使用したパラレル索引付けがサポートされています。
非パーティション表にパラレル索引付け文を入力すると、元表が一時パーティションに分割され、子プロセスが起動し、パーティションに子が割り当てられます。その後、子ごとに、それぞれのパーティションの行が索引付けされます。元表をパーティションに分割する方法はOracleによって判断され、ユーザーが直接制御することはありません。また、実際に起動される子プロセス数もOracleによって判断され、マシンの性能、システム負荷、init.ora
設定およびその他の要因に依存します。これらの変数により、実際の並列度は、要求された並列度に一致しない可能性があります。
索引付けは集中型I/Oの操作であるため、分散ディスク・アクセスと複数CPUを使用する場合は、パラレル索引付けが索引付けに要する時間を短縮するための最も効果的な操作となります。パラレル索引付けは、CREATE
INDEX
文を使用した初期索引のパフォーマンスのみに影響します。ALTER
INDEX
を使用した挿入、更新および削除の操作には影響せず、問合せのパフォーマンスへの影響は最小限です。
パラレル索引付けは、初期の索引付け時間を短縮するため、次の状況で役立ちます。
3.1.8 索引付けとビュー
コンテンツが様々な表に含まれているドキュメントに索引付けする必要がある場合は、ユビキタス検索索引を作成します。
DBMS_SEARCH PL/SQL
パッケージを使用すると、スキーマ内の複数の表およびビューにユビキタス検索索引を作成できます。この索引は、コンポーネント表との主キーおよび外部キー制約関係があるビューにのみ作成できます。
別の方法として、USER_DATASTORE
オブジェクトを使用してデータ記憶域プリファレンスを作成することもできます。このオブジェクトを使用して、索引時に複数の表のドキュメントを合成するプロシージャを定義できます。
Oracle Textでは、マテリアライズド・ビュー(MVIEW
)に対するCONTEXT
、CTXCAT
およびCTXRULE
の各索引の作成がサポートされています。