3.6 正引き索引を使用したドキュメント・サービスのパフォーマンスの改善
Oracle Textは、ドキュメントで単語を検索するときに逆向きの索引を使用し、そのドキュメントからスニペットを計算して結果を表示します。スニペットを計算するために、検索結果の一部として戻される各ドキュメントは再索引付けされます。ドキュメントのサイズが非常に大きい場合には、検索処理が大幅に遅くなります。
正引き索引は、ドキュメントが非常に大きい場合のパフォーマンスの問題を解消します。逆向きの索引表$I
のトークン・オフセットを参照する$O
マッピング表を使用します。各トークン・オフセットは、元のドキュメントで文字オフセットに変換され、文字オフセット周辺のテキストを使用してテキスト・スニペットが生成されます。
正引き索引はスニペットを計算するときドキュメントのインメモリー索引付けを使用しないため、非常に大きいドキュメントで単語を検索するとき、逆向きの索引に比べてパフォーマンスが大幅に向上します。
正引き索引では、Oracle TextのCTX_DOC
パッケージで次のプロシージャのパフォーマンスが向上します。
-
CTX_DOC.SNIPPET
-
CTX_DOC.HIGHLIGHT
-
CTX_DOC.MARKUP
関連項目:
BASIC_STORAGE
索引付けタイプのforward_index
パラメータ句の詳細は、『Oracle Textリファレンス』を参照してください
3.6.1 正引き索引の有効化
次の例は、正引き索引の機能を有効にするために、BASIC_STORAGE
記憶域タイプのforward_index
属性値をTRUE
に設定します。
exec ctx_ddl.create_preference('mystore', 'BASIC_STORAGE'); exec ctx_ddl.set_attribute('mystore','forward_index','TRUE');
3.6.2 スニペットによる正引き索引
場合によっては、forward_index
オプションを使用すると、生成されたスニペットがforward_index
オプションを使用しない場合に生成されたスニペットと比べてわずかに異なる場合があります。一般的には違いは最小限でスニペットの品質には影響せず、通常はごくわずかな余分な空白や改行が入る程度です。
3.6.3 コピー保存による正引き索引
コピー保存を使用して正引き索引を使用
正引き索引を効果的に使用するには、ドキュメントのコピーを$D
表に格納します。格納する形式は、使用するCTX_DOC
パッケージのプロシージャに応じてプレーン・テキスト形式またはフィルタ済形式です。たとえば、SNIPPET
プロシージャを使用するときにはプレーン・テキスト形式で、MARKUP
またはHIGHLIGHT
プロシージャを使用するときにはフィルタ済形式でドキュメントを格納します。
ドキュメントのコピーを$D
表に格納するには、Oracle Textのコピー保存機能を使用します。save_copy
属性またはsave_copy
列パラメータを使用してこの機能を実装します。
-
save_copy
基本記憶域属性:次の例では、
BASIC_STORAGE
記憶域タイプのsave_copy
属性値をPLAINTEXTに設定します。
この例では、Oracle Textは、ドキュメントで単語を検索するときに、$D
表にテキスト・ドキュメントのコピーを保存できます。exec ctx_ddl.create_preference('mystore', 'BASIC_STORAGE'); exec ctx_ddl.set_attribute('mystore','save_copy','PLAINTEXT');
-
save_copy column
索引パラメータ:次の例では、
save_copy column
索引パラメータを使用してテキスト・ドキュメントのコピーを$D
表に保存します。create index
文で$D
表を作成し、ドキュメント1 ("hello world")を$D
表にコピーしています。create table docs( id number, txt varchar2(64), save varchar2(10) ); insert into docs values(1, 'hello world', 'PLAINTEXT'); create index idx on docs(txt) indextype is ctxsys.context parameters('save_copy column save');
save_copy
属性または列パラメータには、次のいずれかの値を指定できます。
-
PLAINTEXT
は、ドキュメントのコピーをプレーン・テキスト形式で$D
索引表に保存します。プレーン・テキスト形式は、セクショナの出力形式として定義されています。SNIPPET
プロシージャを使用するには、この値を指定する必要があります。 -
FILTERED
は、ドキュメントのコピーをフィルタ済形式で$D
索引表に保存します。フィルタ済形式は、フィルタの出力形式として定義されています。MARKUP
またはHIGHLIGHT
プロシージャを使用するときは、この値を指定します。 -
NONE
の場合、ドキュメントのコピーは$D
索引表に保存されません。SNIPPET、MARKUP
またはHIGHLIGHT
プロシージャを使用しない場合でかつ索引付き列がVARCHAR2
またはCLOB
である場合、この値を指定します。
3.6.4 コピー保存を使用しない正引き索引
次の場合、すべてのドキュメントのコピーを$D
表に保存しなくても(つまりコピー保存の機能を使用しなくても)、正引き索引の機能強化を活用できます。
-
ドキュメント・セットにHTMLとプレーン・テキストが含まれている場合:
DIRECT_DATASTORE
またはMULTI_COLUMN_DATASTORE
データストア・タイプを使用して、実表内のすべてのドキュメントを格納します。 -
ドキュメント・セットにHTML、プレーン・テキストおよびバイナリが含まれている場合:
DIRECT_DATASTORE
データストア・タイプを使用して、実表内のすべてのドキュメントを格納します。バイナリ・ドキュメントのみをフィルタ形式で$D
表に格納します。