プライマリ・コンテンツに移動
Oracle® Textリファレンス
11gリリース2(11.2)
B61357-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 CTX_DOCパッケージ

この章では、抽出したテキストのハイライトまたはドキュメントのテーマ・リストの生成などの、ドキュメント・サービスを要求するためのPL/SQLパッケージCTX_DOCについて説明します。

これらのプロシージャの多くには2つの種類があります。索引を使用するプロシージャと、索引を使用しないプロシージャです。索引を使用しないプロシージャは、ポリシーベースのプロシージャと呼ばれます。これらのプロシージャは、CONTEXT索引を事前作成せずに単一のドキュメント上でドキュメント・サービスを使用する場合があるために、提供されています。ポリシーベースのプロシージャを使用することで、このような処理を実行できます。

policy_*プロシージャは従来のインメモリー・ドキュメント・サービスをミラー化し、index_namepolicy_nameに、textkeyをドキュメントのデータ型であるVARCHAR2CLOBBLOBまたはBFILEに置き換えて使用されます。このため、これらのプロシージャを使用してドキュメント・サービス出力を取得するために索引を作成する必要はありません。

文字オフセットおよび長さを生成するプロシージャ(HIGHLIGHTTOKENSなど)について、Oracle TextはUSC-2コードポイント・セマンティクスに準拠します。

CTX_DOCパッケージには、次のプロシージャおよびファンクションが含まれています。

名前 説明
FILTER
プレーン・テキストまたはHTML形式のドキュメントを生成します。
GIST
ドキュメントの要点またはテーマ・サマリーを生成します。
HIGHLIGHT
ドキュメントのオフセット情報をハイライト表示するプレーン・テキストまたはHTML形式を生成します。
IFILTER
プレーン・テキスト形式のバイナリ・データを生成します。USER_DATASTOREプロシージャからコールできます。
MARKUP
問合せ語句がハイライト表示されているドキュメントのプレーン・テキストまたはHTML形式を生成します。
PKENCODE
他のCTX_DOCプロシージャで使用するコンポジット・テキストキー文字列(値)をコード化します。
POLICY_FILTER
プレーン・テキストまたはHTML形式のドキュメントを、索引なしで生成します。
POLICY_GIST
ドキュメントの要点またはテーマ・サマリーを、索引なしで生成します。
POLICY_HIGHLIGHT
プレーン・テキストまたはHTML形式のドキュメントをハイライト表示するオフセット情報を、索引なしで生成します。
POLICY_MARKUP
プレーン・テキストまたはHTML形式のドキュメントを、索引なしで問合せ語句をハイライト表示して生成します。
POLICY_SNIPPET
ドキュメントの用語索引を、問合せ語句に基づいて索引なしで生成します。
POLICY_THEMES
ドキュメントのテーマのリストを、索引なしで生成します。
POLICY_TOKENS
ドキュメントのすべての索引トークンを、索引なしで生成します。
SET_KEY_TYPE
CTX_DOCプロシージャを設定し、ROWIDまたは主キーのドキュメント識別子を受け取ります。
SNIPPET
ドキュメントの用語索引を問合せ語句に基づいて生成します。
THEMES
ドキュメントのテーマのリストを生成します。
TOKENS
ドキュメントのすべての索引トークンを生成します。

FILTER

CTX_DOC.FILTERプロシージャを使用して、プレーン・テキストまたはHTML形式のいずれかのドキュメントを生成します。表示されたドキュメントは、結果表またはメモリーのいずれかに格納できます。このプロシージャは、通常、問合せの後でフィルタ処理するドキュメントを決定してから使用します。


注意:

生成されたHTML形式のドキュメントには、図形は含まれていません。

構文1: インメモリーの結果記憶域

exec CTX_DOC.FILTER(
          index_name  IN VARCHAR2, 
          textkey     IN VARCHAR2, 
          restab      IN OUT NOCOPY CLOB, 
          plaintext   IN BOOLEAN  DEFAULT FALSE);

exec  CTX_DOC.HIGHLIGHT_CLOB_QUERY(
          index_name IN VARCHAR2,
          textkey IN VARCHAR2,
          text_query IN CLOB,
          restab IN OUT NOCOPY HIGHLIGHT_TAB,
          plaintext IN BOOLEAN DEFAULT FALSE);

構文2: 結果表記憶域

exec CTX_DOC.FILTER(
          index_name  IN VARCHAR2, 
          textkey     IN VARCHAR2, 
          restab      IN VARCHAR2, 
          query_id    IN NUMBER DEFAULT 0,
          plaintext   IN BOOLEAN  DEFAULT FALSE);

exec  CTX_DOC.HIGHLIGHT_CLOB_QUERY(
          index_name IN VARCHAR2,
          textkey IN VARCHAR2,
          text_query IN CLOB,
          restab IN VARCHAR2,
          query_id IN NUMBER DEFAULT 0,
          plaintext IN BOOLEAN DEFAULT FALSE);
index_name

textkeyで識別されるドキュメントを含むテキスト列に関連する索引の名前を指定します。

textkey

一意のドキュメントのID(通常は主キー)を指定します。

textkeyパラメータは、次のいずれかです。

  • 単一列の主キーの値。

  • コンポジット(複数列)主キーのコード化された仕様。CTX_DOC.PKENCODEを使用します。

  • ドキュメントを含む行のROWID。

主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。

restab

このプロシージャで、マークアップされたテキストを表またはインメモリーCLOBのどちらに格納するかを指定できます。

結果を表に格納するには、表の名前を指定します。このコールの実行前に、結果を格納する表が存在している必要があります。


関連項目:

フィルタ結果表の構造の詳細は、付録A「Oracle Text結果表」「フィルタ表」を参照してください。

結果をメモリーに格納するには、CLOBロケータの名前を指定します。restabNULLの場合は、一時CLOBが割り当てられて戻ります。使用後は、DBMS_LOB.FREETEMPORARY()でロケータの割当てを解除する必要があります。

restabNULLでない場合は、操作の前にCLOBが切り捨てられます。

query_id

restabに挿入した行の識別に使用する識別子を指定します。

query_idが指定されていないか、またはNULLに設定されている場合、デフォルトは0(ゼロ)です。restabに指定されている表を手動で切り捨てる必要があります。

plaintext

プレーン・テキスト形式のドキュメントを生成するには、TRUEを指定します。AUTO_FILTERフィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSEを指定してHTML形式のドキュメントを生成します。

インメモリー・フィルタ

次のコードは、ドキュメントをメモリー内のHTMLにフィルタ処理する方法を示しています。

declare
mklob clob;
amt number := 40;
line varchar2(80);

begin
 ctx_doc.filter('myindex','1', mklob, FALSE);
 -- mklob is NULL when passed-in, so ctx-doc.filter will allocate a temporary
 -- CLOB for us and place the results there.
 dbms_lob.read(mklob, amt, 1, line);
 dbms_output.put_line('FIRST 40 CHARS ARE:'||line);
 -- have to de-allocate the temp lob
 dbms_lob.freetemporary(mklob);
 end;

フィルタ処理されたドキュメントを格納するために、次のようにフィルタ結果表を作成します。

create table filtertab (query_id  number,   
                        document  clob); 

テキストキー20でプレーン・テキスト形式のドキュメントを取得するには、次の文を入力します。

begin 
ctx_doc.filter('newsindex', '20', 'filtertab', '0', TRUE);
end;

GIST

ドキュメントの要点およびテーマ・サマリーを生成するには、CTX_DOC.GISTプロシージャを使用します。段落レベルまたは文レベルの要点またはテーマ・サマリーを生成できます。


注意:

CTX_DOC.GISTを使用するには、ナレッジ・ベースがインストールされている必要があります。ナレッジ・ベースは、Oracle Textとともにインストールされていない場合があります。ナレッジ・ベースの詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

構文1: インメモリー記憶域

CTX_DOC.GIST(
index_name    IN VARCHAR2, 
textkey       IN VARCHAR2, 
restab        IN OUT CLOB, 
glevel        IN VARCHAR2 DEFAULT 'P',
pov           IN VARCHAR2 DEFAULT 'GENERIC',
numParagraphs IN NUMBER DEFAULT 16,
maxPercent    IN NUMBER DEFAULT 10,
num_themes   IN NUMBER DEFAULT 50);

構文2: 結果表記憶域

CTX_DOC.GIST(
index_name    IN VARCHAR2, 
textkey       IN VARCHAR2, 
restab        IN VARCHAR2, 
query_id      IN NUMBER DEFAULT 0,
glevel        IN VARCHAR2 DEFAULT 'P',
pov           IN VARCHAR2 DEFAULT NULL,
numParagraphs IN NUMBER DEFAULT 16,
maxPercent    IN NUMBER DEFAULT 10,
num_themes     IN NUMBER DEFAULT 50);
index_name

textkeyで識別されるドキュメントを含むテキスト列に関連する索引の名前を指定します。

textkey

一意のドキュメントのID(通常は主キー)を指定します。

textkeyパラメータは、次のいずれかです。

  • 単一列の主キーの値。

  • コンポジット(複数列)主キーのコード化された仕様。コンポジット・テキストキーをコード化するには、CTX_DOC.PKENCODEプロシージャを使用します。

  • ドキュメントを含む行のROWID。

主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。

restab

このプロシージャで、要点およびテーマ・サマリーを表またはインメモリーCLOBのどちらに格納するかを指定します。

結果を表に格納するには、既存の表の名前を指定します。

結果をメモリーに格納するには、CLOBロケータの名前を指定します。restabNULLの場合は、一時CLOBが割り当てられて戻ります。使用後は、ロケータの割当てを解除する必要があります。

restabNULLでない場合は、操作の前にCLOBが切り捨てられます。

query_id

restabに挿入した行の識別に使用する識別子を指定します。

glevel

生成する要点またはテーマ・サマリーのタイプを指定します。有効な値は、次のとおりです。

  • 段落の場合はP

  • 文の場合はS

デフォルトはPです。

pov

要点または単一のテーマ・サマリーを生成するかどうかを指定します。生成される要点またはテーマ・サマリーのタイプ(文レベルまたは段落レベル)は、glevelに指定した値によって決まります。

ドキュメント全体の要点を生成するには、povに値GENERICを指定します。ドキュメントの単一のテーマに対するテーマ・サマリーを生成するには、そのテーマをpovの値として指定します。

結果表記憶域を使用しているときに、povの値を指定しない場合、このプロシージャはドキュメントに対して、全体の要点に加えて最大50個までのテーマ・サマリーを戻します。

インメモリーの結果記憶域をCLOBに対して使用する場合は、povを指定する必要があります。ただし、povを指定しない場合、このプロシージャはドキュメントの全体の要点のみを生成します。


注意:

povパラメータでは、大/小文字が区別されます。ドキュメントの要点を戻すには、すべて大文字で「GENERIC」を指定します。テーマ・サマリーを戻すには、ドキュメントに対して生成されたとおりのテーマを正確に指定します。

ドキュメントに対してTHEMESで生成されたテーマのみを、povの入力として使用できます。


numParagraphs

ドキュメントの要点またはテーマ・サマリーに対して選択されたドキュメントの段落(または文)の最大数を指定します。デフォルトは16です。


注意:

numParagraphsパラメータが使用されるのは、このパラメータによって生成される要点またはテーマ・サマリーのサイズが、maxPercentパラメータによって生成される要点またはテーマ・サマリーのサイズよりも小さいときのみです。

つまり、システムは、常に最小サイズの要点またはテーマ・サマリーを戻します。


maxPercent

ドキュメントの要点またはテーマ・サマリーに対して選択されたドキュメントの段落(または文)の最大数を、ドキュメントの合計段落数(または合計文数)に対する割合で指定します。デフォルトは10です。


注意:

numParagraphsパラメータが使用されるのは、このパラメータによって生成される要点またはテーマ・サマリーのサイズが、maxPercentパラメータによって生成される要点またはテーマ・サマリーのサイズよりも小さいときのみです。

つまり、システムは、常に最小サイズの要点またはテーマ・サマリーを戻します。


num_themes

povの値を指定しない場合は、生成するテーマ・サマリーの数を指定します。たとえば、10を指定すると、トップ10のテーマ・サマリーが戻ります。デフォルトは50です。

0(ゼロ)またはNULLを指定すると、ドキュメント内の全テーマが戻ります。51以上のテーマがドキュメントに格納されている場合、概念階層が表示されるのは、トップ50のテーマのみです。

インメモリー要点

次の例では、10個以内の段落のデフォルト・サイズでない全体の要点表を生成します。結果はCLOBロケータの中のメモリーに格納されます。使用後、コードは戻されたCLOBロケータの割当てを解除します。

set serveroutput on;
declare
  gklob clob;
  amt number := 40;
  line varchar2(80);

begin
 ctx_doc.gist('newsindex','34',gklob, pov => 'GENERIC',numParagraphs => 10);
  -- gklob is NULL when passed-in, so ctx-doc.gist will allocate a temporary
  -- CLOB for us and place the results there.
  
  dbms_lob.read(gklob, amt, 1, line);
  dbms_output.put_line('FIRST 40 CHARS ARE:'||line);
  -- have to de-allocate the temp lob
  dbms_lob.freetemporary(gklob);
 end;

結果表の要点

次の例では、要点表CTX_GISTを作成します。

create table CTX_GIST (query_id  number,
                       pov       varchar2(80),
                       gist      CLOB);

要点およびテーマ・サマリー

次の例では、ドキュメント34に対するデフォルト・サイズの段落レベルの要点と、ドキュメント内の全テーマに対するトップ10のテーマ・サマリーを戻します。

begin
   ctx_doc.gist('newsindex','34','CTX_GIST', 1, num_themes=>10);
end;

次の例では、10個以内の段落のデフォルト・サイズでない要点表を生成します。

begin
  ctx_doc.gist('newsindex','34','CTX_GIST',1,pov =>'GENERIC',numParagraphs=>10);
end;

次の例では、段落数がドキュメントの合計段落数の10パーセント以下である要点表を生成します。

begin 
  ctx_doc.gist('newsindex','34','CTX_GIST',1,pov => 'GENERIC',  maxPercent => 10);
end;

テーマ・サマリー

次の例では、ドキュメント34のinsectsに対する段落レベルのテーマ・サマリーを戻します。デフォルト・サイズのテーマ・サマリーが戻されます。

begin
   ctx_doc.gist('newsindex','34','CTX_GIST',1, pov => 'insects');
end;

HIGHLIGHT

CTX_DOC.HIGHLIGHTプロシージャを使用して、ドキュメントのハイライト・オフセットを生成します。オフセット情報は、指定する問合せを満たすドキュメント内の語句に対して生成されます。これらのハイライト表示される語句は、ワード問合せを満たすワードまたはABOUT問合せを満たすテーマのいずれかです。

プレーン・テキスト形式またはHTML形式のいずれかのドキュメントに対して、ハイライト・オフセットを生成できます。CTX_DOC.HIGHLIGHTが戻す表には、元のドキュメントにあった図形は含まれていません。オフセット情報は、CTX_DOC.FILTERでフィルタ処理された同じドキュメントに適用します。

このプロシージャは、通常、問合せの後で処理するドキュメントを決めてから使用します。

ハイライト・オフセットは、インメモリーPL/SQL表または結果表のいずれかに格納できます。

索引が不要なこのプロシージャの形式は、「CTX_DOC.POLICY_HIGHLIGHT」を参照してください。

構文1: インメモリーの結果記憶域

exec CTX_DOC.HIGHLIGHT(
        index_name  IN VARCHAR2,
        textkey     IN VARCHAR2,
        text_query  IN VARCHAR2,
        restab      IN OUT NOCOPY HIGHLIGHT_TAB,
        plaintext   IN BOOLEAN  DEFAULT FALSE);

exec CTX_DOC.HIGHLIGHT_CLOB_QUERY(
        index_name  IN VARCHAR2,
        textkey     IN VARCHAR2,
        text_query  IN CLOB,
        restab      IN OUT NOCOPY HIGHLIGHT_TAB,
        plaintext   IN BOOLEAN DEFAULT FALSE);

構文2: 結果表記憶域

exec CTX_DOC.HIGHLIGHT(
          index_name  IN VARCHAR2, 
          textkey     IN VARCHAR2, 
          text_query  IN VARCHAR2, 
          restab      IN VARCHAR2, 
          query_id    IN NUMBER   DEFAULT 0,
          plaintext   IN BOOLEAN  DEFAULT FALSE);

exec CTX_DOC.HIGHLIGHT_CLOB_QUERY(
          index_name  IN VARCHAR2,
          textkey     IN VARCHAR2,
          text_query  IN CLOB,
          restab      IN VARCHAR2,
          query_id    IN NUMBER DEFAULT 0,
          plaintext   IN BOOLEAN DEFAULT FALSE);
index_name

textkeyで識別されるドキュメントを含むテキスト列に関連する索引の名前を指定します。

textkey

一意のドキュメントのID(通常は主キー)を指定します。

textkeyパラメータは、次のいずれかです。

  • 単一列の主キーの値。

  • コンポジット(複数列)主キーのコード化された仕様。CTX_DOC.PKENCODEプロシージャを使用します。

  • ドキュメントを含む行のROWID。

主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。

text_query

ドキュメントを取り出すために使用された元の問合せ式を指定します。NULLの場合、ハイライトは生成されません。

text_queryにワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、HIGHLIGHTはストップワードをハイライト表示しません。

text_queryにTHRESHOLD演算子がある場合、その演算子は無視されます。HIGHLIGHTプロシージャは、常に結果セット全体に対するハイライト情報を戻します。

restab

このプロシージャが、ハイライト・オフセットを表またはインメモリーPL/SQL表のいずれかに格納することを指定できます。

結果を表に格納するには、表の名前を指定します。このプロシージャのコール前に、表が存在している必要があります。


関連項目:

ハイライト結果表の構造の詳細は、付録A「Oracle Text結果表」「ハイライト表」を参照してください。

結果をインメモリー表に格納するには、CTX_DOC.HIGHLIGHT_TAB型のインメモリー表の名前を指定します。HIGHLIGHT_TABデータ型は、次のように定義されます。

type highlight_rec is record (
  offset number,
  length number
);
type highlight_tab is table of highlight_rec index by binary_integer;

CTX_DOC.HIGHLIGHTは、操作の前にHIGHLIGHT_TABを消去します。

query_id

restabに挿入した行の識別に使用する識別子を指定します。

query_idが指定されていないか、またはNULLに設定されている場合、デフォルトは0(ゼロ)です。restabに指定されている表を手動で切り捨てる必要があります。

plaintext

プレーン・テキスト・オフセットのドキュメントを生成するには、TRUEを指定します。

AUTO_FILTERフィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSEを指定してドキュメントのHTMLオフセットを生成します。

ハイライト表の作成

ハイライト・オフセット情報を格納するために、ハイライト表を作成します。

create table hightab(query_id number, 
                     offset number, 
                     length number);

ワード・ハイライト・オフセット

ドキュメント20のdogという語句に対するHTMLハイライト・オフセット情報を取得するには、次の問合せを発行します。

begin
ctx_doc.highlight('newsindex', '20', 'dog', 'hightab', 0, FALSE);
end;

テーマ・ハイライト・オフセット

索引newsindexにテーマ・コンポーネントがある場合は、次の問合せを発行することによって、politicsというテーマ問合せに関するHTMLハイライト・オフセット情報を取得します。

begin
ctx_doc.highlight('newsindex', '20', 'about(politics)', 'hightab', 0, FALSE);
end;

この文に対する出力は、ドキュメントのpoliticsのテーマを表すハイライト表示されたワードおよび句に対するオフセットです。

制限事項

CTX_DOC.HIGHLIGHTでは、問合せテンプレートの使用やXML属性値のハイライト表示はサポートされていません。

関連項目

IFILTER

バイナリ・データをテキストにフィルタ処理します。

このプロシージャは、バイナリ・データ(BLOB IN)を取り出し、そのデータをAUTO_FILTERフィルタでフィルタ処理し、そのテキスト形式データをCLOBに書き込みます。(元のドキュメント内の図形はすべて無視されます。)CTX_DOC.IFILTERではセーフ・コールアウトを使用しており、索引は不要です。CTX_DOC.FILTERの場合は、索引が必要です。


注意:

このプロシージャは、将来のリリースではサポートされません。かわりに、CTX_DOC.POLICY_FILTERを使用する必要があります。

要件

CTX_DOC.IFILTERでは、セーフ・コールアウト・メカニズムを使用しているため、extprocエージェントの起動には、SQL*Netリスナーの実行と構成が必要です。

構文

CTX_DOC.IFILTER(data IN BLOB, text IN OUT NOCOPY CLOB);
data

フィルタ処理するバイナリ・データを指定します。

text

宛先のCLOBを指定します。CLOBには、フィルタ処理済のデータが置かれます。このパラメータは、書込み可能な有効なCLOBロケータであることが必要です。NULLまたは書込み禁止のCLOBを渡すと、エラーになります。フィルタ処理済のテキストは、既存のデータがある場合、その末尾に追加されます。

MATCHES問合せでは、VARCHAR2またはCLOBのドキュメント・テキストを使用できます。BLOB入力は使用できないため、フィルタ処理済のドキュメントに直接一致させることはできません。かわりに、AUTO_FILTERフィルタを使用してバイナリ・コンテンツをCLOBにフィルタ処理する必要があります。次の例は、ドキュメント・データがバインド変数:doc_blob内にあることを前提としています。

  declare
    doc_text clob;
  begin
    -- create a temporary CLOB to hold the document text
    dbms_lob.createtemporary(doc_text, TRUE, DBMS_LOB.SESSION);

    -- call ctx_doc.ifilter to filter the BLOB to CLOB data
    ctx_doc.ifilter(:doc_blob, doc_text);

    -- now do the matches query using the CLOB version
    for c1 in (select * from queries where matches(query_string, doc_text)>0)
    loop
      -- do what you need to do here
    end loop;

    dbms_lob.freetemporary(doc_text);
  end;

MARKUP

CTX_DOC.MARKUPプロシージャは、問合せ指定およびドキュメントのテキストキーを取り出し、問合せ語句がマークアップされた形式のドキュメントを戻します。これらのマークアップされた語句は、ワード問合せを満たすワードまたはABOUT問合せを満たすテーマのいずれかです。

マークアップされた出力は、プレーン・テキストまたはHTMLのいずれかに設定できます。CTX_DOC.MARKUPが戻すマークアップ・ドキュメントには、元のドキュメントにあった図形は含まれていません。

ハイライト表示された語句をマークするには、事前定義済のタグセットの1つ(HTMLナビゲーションを可能にするタグ順序を含む)を使用できます。

CTX_DOC.MARKUPは、通常、問合せの後で処理するドキュメントを決めてから使用します。

マークアップされたドキュメントは、メモリーまたは結果表のいずれかに格納できます。

索引が不要なこのプロシージャの形式は、「CTX_DOC.POLICY_MARKUP」を参照してください。


注意:

Oracle TextによってCTX.DOC.MARKUPから戻される出力は、常に整形式であるとはかぎりません。特に、すでにHTMLまたはXMLを使用してマークアップされている語句については保証できません。特に、マークアップ・タグに予期しないネストが存在する場合、このようになることがあります。

構文1: インメモリーの結果記憶域

exec CTX_DOC.MARKUP( 
index_name     IN VARCHAR2, 
textkey        IN VARCHAR2, 
text_query     IN VARCHAR2, 
restab         IN OUT NOCOPY CLOB, 
plaintext      IN BOOLEAN   DEFAULT FALSE, 
tagset         IN VARCHAR2  DEFAULT 'TEXT_DEFAULT', 
starttag       IN VARCHAR2  DEFAULT NULL, 
endtag         IN VARCHAR2  DEFAULT NULL, 
prevtag        IN VARCHAR2  DEFAULT NULL, 
nexttag        IN VARCHAR2  DEFAULT NULL);

exec CTX_DOC.MARKUP_CLOB_QUERY(
index_name     IN VARCHAR2,
textkey        IN VARCHAR2,
text_query     IN CLOB,
restab         IN OUT NOCOPY CLOB,
plaintext      IN BOOLEAN DEFAULT FALSE,
tagset         IN VARCHAR2 DEFAULT 'TEXT_DEFAULT',
starttag       IN VARCHAR2 DEFAULT NULL,
endtag         IN VARCHAR2 DEFAULT NULL,
prevtag        IN VARCHAR2 DEFAULT NULL,
nexttag        IN VARCHAR2 DEFAULT NULL);

構文2: 結果表記憶域

exec CTX_DOC.MARKUP( 
index_name     IN VARCHAR2, 
textkey        IN VARCHAR2, 
text_query     IN VARCHAR2, 
restab         IN VARCHAR2, 
query_id       IN NUMBER    DEFAULT 0,  
plaintext      IN BOOLEAN   DEFAULT FALSE, 
tagset         IN VARCHAR2  DEFAULT 'TEXT_DEFAULT', 
starttag       IN VARCHAR2  DEFAULT NULL, 
endtag         IN VARCHAR2  DEFAULT NULL, 
prevtag        IN VARCHAR2  DEFAULT NULL, 
nexttag        IN VARCHAR2  DEFAULT NULL);

exec CTX_DOC.MARKUP_CLOB_QUERY(
index_name     IN VARCHAR2,
textkey        IN CLOB,
text_query     IN VARCHAR2,
restab         IN VARCHAR2,
query_id       IN NUMBER DEFAULT 0,
plaintext      IN BOOLEAN DEFAULT FALSE,
tagset         IN VARCHAR2 DEFAULT 'TEXT_DEFAULT',
starttag       IN VARCHAR2 DEFAULT NULL,
endtag         IN VARCHAR2 DEFAULT NULL,
prevtag        IN VARCHAR2 DEFAULT NULL,
nexttag        IN VARCHAR2 DEFAULT NULL);
index_name

textkeyで識別されるドキュメントを含むテキスト列に関連する索引の名前を指定します。

textkey

一意のドキュメントのID(通常は主キー)を指定します。

textkeyパラメータは、次のいずれかです。

  • 単一列の主キーの値。

  • コンポジット(複数列)主キーのコード化された仕様。CTX_DOC.PKENCODEプロシージャを使用します。

  • ドキュメントを含む行のROWID。

主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。

text_query

ドキュメントを取り出すために使用された元の問合せ式を指定します。

text_queryにワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、MARKUPはストップワードをハイライト表示しません。

text_queryにTHRESHOLD演算子がある場合、その演算子は無視されます。MARKUPプロシージャは、常に結果セット全体に対するハイライト情報を戻します。

restab

このプロシージャで、マークアップされたテキストを表またはインメモリーCLOBのどちらに格納するかを指定できます。

結果を表に格納するには、表の名前を指定します。このプロシージャのコール前に、結果表が存在している必要があります。


関連項目:

マークアップ結果表の構造の詳細は、付録A「Oracle Text結果表」「マークアップ表」を参照してください。

結果をメモリーに格納するには、CLOBロケータの名前を指定します。restabNULLの場合は、一時CLOBが割り当てられて戻ります。使用後は、ロケータの割当てを解除する必要があります。

restabNULLでない場合は、操作の前にCLOBが切り捨てられます。

query_id

restabに挿入した行の識別に使用する識別子を指定します。

query_idが指定されていないか、またはNULLに設定されている場合、デフォルトは0(ゼロ)です。restabに指定されている表を手動で切り捨てる必要があります。

plaintext

プレーン・テキストのマークアップ・ドキュメントを生成するには、TRUEを指定します。AUTO_FILTERフィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSEを指定してマークアップされたHTML形式のドキュメントを生成します。

tagset

次の事前定義済のタグセットの1つを指定します。この表の2列目および3列目は、各tagsetに対して定義された4つの異なるタグを示します。

タグセット タグ タグ値
TEXT_DEFAULT starttag <<<

endtag >>>

prevtag

nexttag
HTML_DEFAULT starttag <B>

endtag </B>

prevtag

nexttag
HTML_NAVIGATE starttag <A NAME=ctx%CURNUM><B>

endtag </B></A>

prevtag <A HREF=#ctx%PREVNUM>&lt;</A>

nexttag <A HREF=#ctx%NEXTNUM>&gt;</A>

starttag

ハイライト表示された語句の開始を示すために、MARKUPによって挿入された文字を指定します。

ハイライト表示されたワードに対するstarttag、endtag、prevtagおよびnexttagの順序は、次のとおりです。

... prevtag starttag word endtag nexttag...
endtag

ハイライト表示された語句の終了を示すために、MARKUPによって挿入された文字を指定します。

prevtag

前のハイライト表示された部分にユーザーをナビゲートするタグを定義するマークアップ順序を指定します。

マークアップ順序prevtagおよびnexttagで、動的に設定される次のオフセット変数を指定できます。

オフセット変数
%CURNUM 現在のオフセット番号
%PREVNUM 前のオフセット番号
%NEXTNUM 次のオフセット番号

例については、HTML_NAVIGATEタグセットの記述を参照してください。

nexttag

次のハイライト表示された部分にユーザーをナビゲートするタグを定義するマークアップ順序を指定します。

マークアップ順序内で、prevtagに使用するものと同じオフセット変数を使用できます。例については、prevtagおよびHTML_NAVIGATEタグセットの記述を参照してください。

インメモリー・マークアップ

次のコードは、ドキュメント(the dog chases the cat)を取り出し、割り当てられたマークアップを実行し、結果をメモリーに格納します。

set serveroutput on
 
drop table mark_tab;
create table mark_tab (id number primary key, text varchar2(80) );
insert into mark_tab values ('1', 'The dog chases the cat.');
 
create index mark_tab_idx on mark_tab(text)
        indextype is ctxsys.context parameters
        ('filter ctxsys.null_filter');
 
declare
mklob clob;
amt number := 40;
line varchar2(80);
 
begin
 ctx_doc.markup('mark_tab_idx','1','dog AND cat', mklob);
 -- mklob is NULL when passed-in, so ctx_doc.markup will
 -- allocate a temporary CLOB for us and place the results there.
 dbms_lob.read(mklob, amt, 1, line);
 dbms_output.put_line('FIRST 40 CHARS ARE:'||line);
 -- have to de-allocate the temp lob
 dbms_lob.freetemporary(mklob);
 end;
/

この例の出力には、マークアップ・ドキュメントの外観が示されます。

FIRST 40 CHARS ARE:  The <<<dog>>> chases the <<<cat>>>.

マークアップ表

マークアップされたドキュメントを格納するために、次のようにハイライト・マークアップ表を作成します。

create table markuptab (query_id  number,   
                        document  clob); 

HTMLのワード・ハイライト

MARKUPの結果を表に格納することもできます。ドキュメント23のdogまたはcatというワードに対するHTMLハイライト・マークアップを作成するには、次の文を入力します。

begin
  ctx_doc.markup(index_name => 'my_index',
                      textkey => '23',
                      text_query => 'dog|cat',
                      restab => 'markuptab',
                      query_id => '1',
                      tagset => 'HTML_DEFAULT');
end;

HTMLのテーマ・ハイライト

ドキュメント23のpoliticsというテーマに対するHTMLハイライト・マークアップを作成するには、次の文を入力します。

begin
  ctx_doc.markup(index_name => 'my_index',
                      textkey => '23',
                      text_query => 'about(politics)',
                      restab => 'markuptab',
                      query_id => '1',
                      tagset => 'HTML_DEFAULT');
end;

制限事項

CTX_DOC.MARKUPでは、問合せテンプレートの使用はサポートされていません。

関連項目

PKENCODE

CTX_DOC.PKENCODEファンクションは、コンポジット・テキストキーのリストを1つの文字列に変換し、文字列を戻します。

PKENCODEによって作成された文字列は、CTX_DOC.THEMESやCTX_DOC.GISTなどの他のCTX_DOCプロシージャで、主キー・パラメータtextkeyとして使用できます。

構文

CTX_DOC.PKENCODE(
         pk1    IN VARCHAR2,
         pk2    IN VARCHAR2 DEFAULT NULL, 
         pk4    IN VARCHAR2 DEFAULT NULL, 
         pk5    IN VARCHAR2 DEFAULT NULL, 
         pk6    IN VARCHAR2 DEFAULT NULL,
         pk7    IN VARCHAR2 DEFAULT NULL,
         pk8    IN VARCHAR2 DEFAULT NULL,
         pk9    IN VARCHAR2 DEFAULT NULL,
         pk10   IN VARCHAR2 DEFAULT NULL,
         pk11   IN VARCHAR2 DEFAULT NULL,
         pk12   IN VARCHAR2 DEFAULT NULL,
         pk13   IN VARCHAR2 DEFAULT NULL,
         pk14   IN VARCHAR2 DEFAULT NULL,
         pk15   IN VARCHAR2 DEFAULT NULL,
         pk16   IN VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2;
pk1-pk16

各PK引数はコンポジット・テキストキー・リストの列要素を指定します。最大16列の要素をコード化できます。

戻り値

コンポジット・テキストキーのコード化された値を表す文字列です。

begin 
ctx_doc.gist('newsindex',CTX_DOC.PKENCODE('smith', 14), 'CTX_GIST');
end;

この例のsmithおよび14は、ドキュメントのコンポジット・テキストキーの値を構成します。

POLICY_FILTER

プレーン・テキストまたはHTML形式のドキュメントを生成します。このプロシージャでは、CONTEXT索引は不要です。

このプロシージャでは、信頼できるコールアウトを使用しています。

構文

ctx_doc.policy_filter(policy_name    in  VARCHAR2,
                      document       in [VARCHAR2|CLOB|BLOB|BFILE],
                      restab         in out nocopy CLOB,
                      plaintext      in BOOLEAN default FALSE,
                      language       in VARCHAR2 default NULL,
                      format         in VARCHAR2 default NULL,
                      charset        in VARCHAR2 default NULL);
policy_name

CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。

document

フィルタ処理するドキュメントを指定します。

restab

CLOBロケータの名前を指定します。

plaintext

プレーン・テキスト形式のドキュメントを生成するには、TRUEを指定します。AUTO_FILTERフィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSEを指定してHTML形式のドキュメントを生成します。

language

ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。第2章「Oracle Text索引付けの要素」「BASIC_LEXER」を参照してください。

format

ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、第1章「Oracle TextのSQL文と演算子」「CREATE INDEX」のフォーマット列の説明を参照してください。

charset

ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。詳細は、第2章「Oracle Text索引付けの要素」「複合キャラクタ・セット列の索引付け」を参照してください。

POLICY_GIST

ドキュメントの要点またはテーマ・サマリーを生成します。段落レベルまたは文レベルの要点またはテーマ・サマリーを生成できます。このプロシージャでは、CONTEXT索引は不要です。


注意:

CTX_DOC.POLICY_GISTを使用するには、ナレッジ・ベースがインストールされている必要があります。ナレッジ・ベースは、Oracle Textとともにインストールされていない場合があります。ナレッジ・ベースの詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

構文

ctx_doc.policy_gist(policy_name      in VARCHAR2,
                    document         in [VARCHAR2|CLOB|BLOB|BFILE],
                    restab           in out nocopy CLOB,
                    glevel           in VARCHAR2 default 'P',
                    pov              in VARCHAR2 default 'GENERIC',
                    numParagraphs    in VARCHAR2 default NULL,
                    maxPercent       in NUMBER default NULL,
                    num_themes       in NUMBER default 50
                    language         in VARCHAR2 default NULL,
                    format           in VARCHAR2 default NULL,
                    charset          in VARCHAR2 default NULL
);
policy_name

CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。

document

要点またはテーマ・サマリーを生成するドキュメントを指定します。

restab

CLOBロケータの名前を指定します。

glevel

生成する要点またはテーマ・サマリーのタイプを指定します。有効な値は、次のとおりです。

  • 段落の場合はP

  • 文の場合はS

デフォルトはPです。

pov

要点または単一のテーマ・サマリーを生成するかどうかを指定します。生成される要点またはテーマ・サマリーのタイプ(文レベルまたは段落レベル)は、glevelに指定した値によって決まります。

ドキュメント全体の要点を生成するには、povに値GENERICを指定します。ドキュメントの単一のテーマに対するテーマ・サマリーを生成するには、そのテーマをpovの値として指定します。

結果表記憶域を使用し、povの値を指定しない場合、このプロシージャはドキュメントに対して、全体の要点に加えて最大50個までのテーマ・サマリーを戻します。


注意:

povパラメータでは、大/小文字が区別されます。ドキュメントの要点を戻すには、すべて大文字で「GENERIC」を指定します。テーマ・サマリーを戻すには、ドキュメントに対して生成されたとおりのテーマを正確に指定します。

ドキュメントに対してTHEMESで生成されたテーマのみを、povの入力として使用できます。


numParagraphs

ドキュメントの要点またはテーマ・サマリーに対して選択されたドキュメントの段落(または文)の最大数を指定します。デフォルトは16です。


注意:

numParagraphsパラメータが使用されるのは、このパラメータによって生成される要点またはテーマ・サマリーのサイズが、maxPercentパラメータによって生成される要点またはテーマ・サマリーのサイズよりも小さいときのみです。

つまり、システムは、常に最小サイズの要点またはテーマ・サマリーを戻します。


maxPercent

ドキュメントの要点またはテーマ・サマリーに対して選択されたドキュメントの段落(または文)の最大数を、ドキュメントの合計段落数(または合計文数)に対する割合で指定します。デフォルトは10です。


注意:

numParagraphsパラメータが使用されるのは、このパラメータによって生成される要点またはテーマ・サマリーのサイズが、maxPercentパラメータによって生成される要点またはテーマ・サマリーのサイズよりも小さいときのみです。

つまり、システムは、常に最小サイズの要点またはテーマ・サマリーを戻します。


num_themes

povの値を指定しない場合は、生成するテーマ・サマリーの数を指定します。たとえば、10を指定すると、トップ10のテーマ・サマリーが戻ります。デフォルトは50です。

0(ゼロ)またはNULLを指定すると、ドキュメント内の全テーマが戻ります。51以上のテーマがドキュメントに格納されている場合、概念階層が表示されるのは、トップ50のテーマのみです。

language

ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。「MULTI_LEXER」を参照してください。

format

ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。

charset

ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。

POLICY_HIGHLIGHT

プレーン・テキストまたはHTML形式のドキュメントをハイライト表示するオフセット情報を生成します。このプロシージャでは、CONTEXT索引は不要です。

オフセット情報は、指定する問合せを満たすドキュメント内の語句に対して生成されます。これらのハイライト表示される語句は、ワード問合せを満たすワードまたはABOUT問合せを満たすテーマのいずれかです。

プレーン・テキスト形式またはHTML形式のいずれかのドキュメントに対して、ハイライト・オフセットを生成できます。オフセット情報は、CTX_DOC.FILTERでフィルタ処理された同じドキュメントに適用します。

構文

exec ctx_doc.policy_highlight(
                         policy_name  in  VARCHAR2,
                         document     in  [VARCHAR2|CLOB|BLOB|BFILE],
                         text_query   in VARCHAR2,
                         restab       in out nocopy highlight_tab,
                         plaintext    in boolean FALSE
                         language     in VARCHAR2 default NULL,
                         format       in VARCHAR2 default NULL,
                         charset      in VARCHAR2 default NULL
);

exec ctx_doc.policy_highlight_clob_query(
                         policy_name  in VARCHAR2,
                         document     in [VARCHAR2|CLOB|BLOB|BFILE],
                         text_query   in CLOB,
                         restab       in out nocopy highlight_tab,
                         plaintext    in boolean FALSE
                         language     in VARCHAR2 default NULL,
                         format       in VARCHAR2 default NULL,
                         charset      in VARCHAR2 default NULL
);
policy_name

CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。

document

ハイライト表示するオフセット情報を生成するドキュメントを指定します。

text_query

ドキュメントを取り出すために使用された元の問合せ式を指定します。NULLの場合、ハイライトは生成されません。

text_queryにワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、このプロシージャはストップワードをハイライト表示しません。

text_queryにTHRESHOLD演算子がある場合、その演算子は無視されます。このプロシージャは、常に結果セット全体に対するハイライト情報を戻します。

restab

highlight_tab PL/SQL索引付き表型の名前を指定します。


関連項目:

highlight_tab表型の構造の詳細は、「HIGHLIGHT」を参照してください。

plaintext

プレーン・テキスト・オフセットのドキュメントを生成するには、TRUEを指定します。

AUTO_FILTERフィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSEを指定してドキュメントのHTMLオフセットを生成します。

language

ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。第2章「Oracle Text索引付けの要素」「MULTI_LEXER」を参照してください。

format

ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。

charset

ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。

制限事項

CTX_DOC.POLICY_HIGHLIGHTでは、問合せテンプレートの使用はサポートされていません。

POLICY_MARKUP

問合せ語句がハイライト表示されているドキュメントのプレーン・テキストまたはHTML形式を生成します。このプロシージャでは、CONTEXT索引は不要です。

CTX_DOC.POLICY_MARKUPプロシージャは、問合せ指定およびドキュメントを取り出し、問合せ語句がマークアップされた形式のドキュメントを戻します。これらのマークアップされた語句は、ワード問合せを満たすワードまたはABOUT問合せを満たすテーマのいずれかです。

マークアップされた出力は、プレーン・テキストまたはHTMLのいずれかに設定できます。

ハイライト表示された語句をマークするには、事前定義済のタグセットの1つ(HTMLナビゲーションを可能にするタグ順序を含む)を使用できます。

構文

ctx_doc.policy_markup(policy_name     in VARCHAR2,
                      document        in [VARCHAR2|CLOB|BLOB|BFILE],
                      text_query      in VARCHAR2,
                      restab          in out nocopy CLOB,
                      plaintext       in BOOLEAN default FALSE,
                      tagset          in VARCHAR2 default 'TEXT_DEFAULT',
                      starttag        in VARCHAR2 default NULL,
                      endtag          in VARCHAR2 default NULL,
                      prevtag         in VARCHAR2 default NULL,
                      nexttag         in VARCHAR2 default NULL
                      language        in VARCHAR2 default NULL,
                      format          in VARCHAR2 default NULL,
                      charset         in VARCHAR2 default NULL
);

ctx_doc.policy_markup_clob_query(
                      policy_name     in VARCHAR2,
                      document        in [VARCHAR2|CLOB|BLOB|BFILE],
                      text_query      in CLOB,
                      restab          in out nocopy CLOB,
                      plaintext       in BOOLEAN default FALSE,
                      tagset          in VARCHAR2 default 'TEXT_DEFAULT',
                      starttag        in VARCHAR2 default NULL,
                      endtag          in VARCHAR2 default NULL,
                      prevtag         in VARCHAR2 default NULL,
                      nexttag         in VARCHAR2 default NULL
                      language        in VARCHAR2 default NULL,
                      format          in VARCHAR2 default NULL,
                      charset         in VARCHAR2 default NULL
);
policy_name

CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。

document

ハイライト表示するオフセット情報を生成するドキュメントを指定します。

text_query

ドキュメントを取り出すために使用された元の問合せ式を指定します。

text_queryにNULLが含まれている場合、このプロシージャは失敗し、エラーが生成されます。

text_queryにワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、このプロシージャはストップワードをハイライト表示しません。

text_queryにTHRESHOLD演算子がある場合、その演算子は無視されます。このプロシージャは、常に結果セット全体に対するハイライト情報を戻します。

restab

CLOBロケータの名前を指定します。

plaintext

プレーン・テキストのマークアップ・ドキュメントを生成するには、TRUEを指定します。AUTO_FILTERフィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSEを指定してマークアップされたHTML形式のドキュメントを生成します。

tagset

次の事前定義済のタグセットの1つを指定します。この表の2列目および3列目は、各タグセットに対して定義された4つの異なるタグを示します。

タグセット タグ タグ値
TEXT_DEFAULT starttag <<<

endtag >>>

prevtag

nexttag
HTML_DEFAULT starttag <B>

endtag </B>

prevtag

nexttag
HTML_NAVIGATE starttag <A NAME=ctx%CURNUM><B>

endtag </B></A>

prevtag <A HREF=#ctx%PREVNUM>&lt;</A>

nexttag <A HREF=#ctx%NEXTNUM>&gt;</A>

starttag

ハイライト表示された語句の開始を示すために、MARKUPによって挿入された文字を指定します。

ハイライト表示されたワードに対するstarttag、endtag、prevtagおよびnexttagの順序は、次のとおりです。

... prevtag starttag word endtag nexttag...
endtag

ハイライト表示された語句の終了を示すために、MARKUPによって挿入された文字を指定します。

prevtag

前のハイライト表示された部分にユーザーをナビゲートするタグを定義するマークアップ順序を指定します。

マークアップ順序prevtagおよびnexttagで、動的に設定される次のオフセット変数を指定できます。

オフセット変数
%CURNUM 現在のオフセット番号
%PREVNUM 前のオフセット番号
%NEXTNUM 次のオフセット番号

例については、HTML_NAVIGATEタグセットの記述を参照してください。

nexttag

次のハイライト表示された部分にユーザーをナビゲートするタグを定義するマークアップ順序を指定します。

マークアップ順序内で、prevtagに使用するものと同じオフセット変数を使用できます。例については、prevtagおよびHTML_NAVIGATEタグセットの記述を参照してください。

language

ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。第2章「Oracle Text索引付けの要素」「MULTI_LEXER」を参照してください。

format

ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。

charset

ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。詳細は、第2章「Oracle Text索引付けの要素」「複合キャラクタ・セット列の索引付け」を参照してください。

制限事項

CTX_DOC.POLICY_MARKUPでは、問合せテンプレートの使用はサポートされていません。

POLICY_SNIPPET

コンテキスト内のマークアップ・キーワードを表示します。戻されたテキストに含まれるのは、ワード問合せを満たすワードまたはABOUT問合せを満たすテーマのいずれかです。このバージョンのCTX_DOC.SNIPPETプロシージャでは、索引は不要です。

構文

構文1

exec CTX_DOC.POLICY_SNIPPET(
policy_name              IN VARCHAR2,
document                 IN [VARCHAR2|CLOB|BLOB|BFILE],
text_query               IN VARCHAR2,
language                 IN VARCHAR2 default NULL,
format                   IN VARCHAR2 default NULL,
charset                  IN VARCHAR2 default NULL,
starttag                 IN VARCHAR2 DEFAULT '<b>',
endtag                   IN VARCHAR2 DEFAULT '</b>',
entity_translation       IN BOOLEAN  DEFAULT TRUE,
separator                IN VARCHAR2 DEFAULT '<b>...</b>'
)
return varchar2;

構文2

exec CTX_DOC.POLICY_SNIPPET_CLOB_QUERY(
policy_name              IN VARCHAR2,
document                 IN [VARCHAR2|CLOB|BLOB|BFILE],
text_query               IN CLOB,
language                 IN VARCHAR2 default NULL,
format                   IN VARCHAR2 default NULL,
charset                  IN VARCHAR2 default NULL,
starttag                 IN VARCHAR2 DEFAULT '<b>',
endtag                   IN VARCHAR2 DEFAULT '</b>',
entity_translation       IN BOOLEAN DEFAULT TRUE,
separator                IN VARCHAR2 DEFAULT '<b>...</b>'
)
return varchar2;
policy_name

CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。

document

キーワード検索の対象となるドキュメントを指定します。

text_query

ドキュメントを取り出すために使用された元の問合せ式を指定します。NULLの場合、ハイライトは生成されません。

text_queryにワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、POLICY_SNIPPETはストップワードをハイライト表示しません。

text_queryにTHRESHOLD演算子がある場合、その演算子は無視されます。

language

ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。第2章「Oracle Text索引付けの要素」「MULTI_LEXER」を参照してください。

format

ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。

charset

ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。詳細は、第2章「Oracle Text索引付けの要素」「複合キャラクタ・セット列の索引付け」を参照してください。

starttag

問合せキーワードのマークアップ用の開始タグを指定します。デフォルトは<b>です。

endtag

問合せキーワードのマークアップ用の終了タグを指定します。デフォルトは</b>です。

entity_translation

HTMLエンティティを変換させるかどうかを指定します。デフォルトはTRUEで、プロシージャによって出力される際、特殊エンティティ(<>&)が代替形式(&lt;&gt;&amp;)に変換されます。ただし、CTX_DOC.POLICY_SNIPPETによって生成されたマークアップ・タグ内の特殊文字は変換されません。

separator

戻される複数の異なるフラグメントを区切る文字列を指定します。デフォルトは<b>...</b>です。

制限事項

CTX_DOC.POLICY_SNIPPETでは、問合せテンプレートの使用はサポートされていません。

CTX_DOC.POLICY_SNIPPETNULL_SECTION_GROUPで使用すると、コンテキスト内のマークアップ・キーワードが表示されます。ただし、XMLドキュメントでこのプロシージャを使用する場合は制限があります。XML_SECTION_GROUPまたはAUTO_SECTION_GROUPで使用すると、XML構造は無視され、ユーザーが指定したタグは外されます。したがって、戻される結果には、テキストの前後の部分が含まれることになります。

関連項目


関連項目:

「SNIPPET」「HIGHLIGHT」および「MARKUP」

POLICY_THEMES

ドキュメントのテーマのリストを生成します。このプロシージャでは、CONTEXT索引は不要です。


注意:

CTX_DOC.POLICY_THEMESを使用するには、ナレッジ・ベースがインストールされている必要があります。ナレッジ・ベースは、Oracle Textとともにインストールされていない場合があります。ナレッジ・ベースの詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

構文

ctx_doc.policy_themes(policy_name    in VARCHAR2, 
                              document       in [VARCHAR2|CLOB|BLOB|BFILE],
                      restab         in out nocopy theme_tab,
                      full_themes    in BOOLEAN default FALSE,
                      num_themes     in number    default 50
                      language       in VARCHAR2 default NULL,
                      format         in VARCHAR2 default NULL,
                      charset        in VARCHAR2 default NULL
);
policy_name

CTX_DDL.CREATE_POLICYを使用して作成されたポリシーを指定します。

document

テーマのリストを生成するドキュメントを指定します。

restab

theme_tab PL/SQL索引付き表型の名前を指定します。


関連項目:

theme_tab型の構造の詳細は、「THEMES」を参照してください。

full_themes

このプロシージャが、各ドキュメント・テーマに対して単一のテーマを作成するか、親テーマ(全テーマ)の階層型リストを作成するかを指定します。

TRUEを指定すると、このプロシージャは全テーマを結果表のTHEME列に書き込みます。

FALSEを指定すると、このプロシージャは単一テーマ情報を結果表のTHEME列に書き込みます。これはデフォルトです。

num_themes

取り出すテーマの最大数を指定します。たとえば、10を指定すると、ドキュメントのテーマが最初の10個まで戻ります。デフォルトは50です。

0(ゼロ)またはNULLを指定すると、ドキュメント内の全テーマが戻ります。51以上のテーマがドキュメントに格納されている場合、概念階層が表示されるのは、最初の50テーマのみです。

language

ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。第2章「Oracle Text索引付けの要素」「MULTI_LEXER」を参照してください。

format

ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXTBINARYまたはIGNOREのいずれか)を使用します。詳細は、第1章「Oracle TextのSQL文と演算子」「CREATE INDEX」のフォーマット列の説明を参照してください。

charset

ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。詳細は、第2章「Oracle Text索引付けの要素」「複合キャラクタ・セット列の索引付け」を参照してください。

ポリシーを作成します。

exec ctx_ddl.create_policy('mypolicy');

テーマを実行します。

declare
  la      varchar2(200);
  rtab    ctx_doc.theme_tab;
begin
   ctx_doc.policy_themes('mypolicy', 
           'To define true madness, What is''t but to be nothing but mad?', rtab);
   for i in 1..rtab.count loop
     dbms_output.put_line(rtab(i).theme||':'||rtab(i).weight);
   end loop;
end;

POLICY_TOKENS

ドキュメントのすべての索引トークンを生成します。このプロシージャでは、CONTEXT索引は不要です。

構文

ctx_doc.policy_tokens(policy_name    in  VARCHAR2,
                      document       in  [VARCHAR2|CLOB|BLOB|BFILE],
                      restab         in  out nocopy token_tab,
                      language       in  VARCHAR2 default NULL,
                      format         in  VARCHAR2 default NULL,
                      charset        in  VARCHAR2 default NULL);
policy_name

CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。

document

トークンを生成するドキュメントを指定します。

restab

token_tab PL/SQL索引付き表型の名前を指定します。

戻されるトークンは、ドキュメントの索引に挿入されるトークンです。ストップワードは戻されません。セクション・タグは、テキスト・トークンではないため、戻されません。


関連項目:

token_tab型の構造の詳細は、この章の「TOKENS」を参照してください。

language

ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。第2章「Oracle Text索引付けの要素」「MULTI_LEXER」を参照してください。

format

ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。

charset

ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。詳細は、第2章「Oracle Text索引付けの要素」「複合キャラクタ・セット列の索引付け」を参照してください。

トークンを取得します。

declare
  la     varchar2(200);
  rtab   ctx_doc.token_tab;
begin
   ctx_doc.policy_tokens('mypolicy', 
        'To define true madness, What is''t but to be nothing but mad?',rtab);
   for i in 1..rtab.count loop
     dbms_output.put_line(rtab(i).offset||':'||rtab(i).token);
   end loop;
end;

SET_KEY_TYPE

このプロシージャを使用してCTX_DOCプロシージャを設定し、ROWIDまたはPRIMARY_KEYのドキュメントの識別子を受け取ります。この設定は、セッションの起動にのみ影響を与えます。

構文

ctx_doc.set_key_type(key_type in varchar2);
key_type

ROWIDまたはPRIMARY_KEYのいずれかを、CTX_DOCプロシージャに対する入力キー・タイプ(ドキュメント識別子)として指定します。

このパラメータのデフォルトは、CTX_DOC_KEY_TYPEシステム・パラメータの値です。


注意:

元表に主キーがない場合は、PRIMARY_KEYにkey_typeを指定しても無視されます。CTX_DOCプロシージャに指定するtextkeyパラメータは、ROWIDとして解釈されます。

次の例では、CTX_DOCプロシージャを設定して、主キーのドキュメント識別子を受け取ります。

begin
ctx_doc.set_key_type('PRIMARY_KEY');
end

SNIPPET

ドキュメントの用語索引を作成するには、CTX_DOC.SNIPPETプロシージャを使用します。用語索引とは、問合せ語句とその前後のテキストを含むテキストの断片(フラグメント)です。この用語索引は、マークアップされた問合せキーワードを前後のテキストと一緒に戻すため、文脈付きキーワード(KWIC)としても知られており、ユーザーは問合せキーワードを文脈で評価できます。戻されたテキストには、ABOUT問合せを満たすテーマが含まれていることもあります。

たとえば、brilligslitheyの検索では、ドキュメントの関連フラグメントが戻される場合もあります。

'Twas <b>brillig</b>, and the <b>slithey</b> toves did gyre and

CTX_DOC.SNIPPETは、問合せ語句を含んでいるドキュメントを対象として、関連性の最も高い1つ以上のフラグメントを戻します。CTX_DOC.SNIPPETは前後のテキストも含めて戻すため、ユーザーは戻された語句の有用性を即時に評価できます。CTX_DOC.SNIPPETは、戻されたテキストのワードがマークアップされていない場合に全体のドキュメントを戻します。


関連項目:

このプロシージャのポリシーベースのバージョンは、「CTX_DOC.POLICY_SNIPPET」を参照してください。

構文

構文1

exec CTX_DOC.SNIPPET(
index_name              IN VARCHAR2,
textkey                  IN VARCHAR2,
text_query               IN VARCHAR2,
starttag                 IN VARCHAR2 DEFAULT '<b>',
endtag                   IN VARCHAR2 DEFAULT '</b>',
entity_translation       IN BOOLEAN  DEFAULT TRUE,
separator                IN VARCHAR2 DEFAULT '<b>...</b>'
)
return varchar2;

構文2

exec CTX_DOC.SNIPPET_CLOB_QUERY(
index_name               IN VARCHAR2,
textkey                  IN VARCHAR2,
text_query               IN CLOB,
starttag                 IN VARCHAR2 DEFAULT '<b>',
endtag                   IN VARCHAR2 DEFAULT '</b>',
entity_translation       IN BOOLEAN DEFAULT TRUE,
separator                IN VARCHAR2 DEFAULT '<b>...</b>'
)
return varchar2;
index_name

テキスト列の索引名を指定します。

textkey

一意のドキュメントのID(通常は主キー)を指定します。

textkeyパラメータは、次のいずれかです。

  • 単一列の主キーの値。

  • コンポジット(複数列)主キーのコード化された仕様。テキストキーがコンポジット・キーの場合は、CTX_DOC.PKENCODEプロシージャを使用して、コンポジット・テキストキー文字列をコード化する必要があります。

  • ドキュメントを含む行のROWID。

主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。

text_query

ドキュメントを取り出すために使用された元の問合せ式を指定します。NULLの場合、ハイライトは生成されません。

text_queryにワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、SNIPPETはストップワードをハイライト表示しません。

text_queryにTHRESHOLD演算子がある場合、その演算子は無視されます。

starttag

問合せキーワードのマークアップ用の開始タグを指定します。デフォルトは<b>です。

endtag

問合せキーワードのマークアップ用の終了タグを指定します。デフォルトは</b>です。

entity_translation

HTMLエンティティを変換させるかどうかを指定します。デフォルトはTRUEで、プロシージャによって出力される際、特殊エンティティ(<>&)が代替形式(&lt;&gt;&amp;)に変換されます。ただし、CTX_DOC.SNIPPETによって生成されたマークアップ・タグ内の特殊文字は変換されません。

separator

戻される複数の異なるフラグメントを区切る文字列を指定します。デフォルトは<b>...</b>です。

create table tdrbhk01 (id number primary key, text varchar2(4000));

insert into tdrbhk01 values (1, 'Oracle Text adds powerful search
<title>withintitle</title> and intelligent text management to the Oracle
database.  Complete.  You can search and manage documents, web pages,
catalog entries in more than 150 formats in any language.  Provides a
complete text query language and complete character support.  Simple.  You
can index and search text using SQL. Oracle Text Management can be done
using Oracle Enterprise Manager - a GUI tool.  Fast.  You can search
millions of documents, document,web pages, catalog entries using the
power and scalability of the database.  Intelligent.  Oracle Text''s
unique knowledge-base enables you to search, classify, manage
documents, clusters and summarize text based on its meaning as well as
its content. ');

exec ctx_ddl.create_section_group('my_sectioner','BASIC_SECTION_GROUP');
exec ctx_ddl.add_field_section('my_sectioner','title','title', false);
 
create index tdrbhk01x on tdrbhk01(text) indextype is ctxsys.context
  parameters ('filter CTXSYS.NULL_FILTER
               section group my_sectioner
               nopopulate');
 
select ctx_doc.snippet('tdrbhk01x','1',
              'search | classify') from dual;
 

次のような結果になります。

CTX_DOC.SNIPPET('TDRBHK01X','1','SEARCH|CLASSIFY')
------------------------------------------------------------------------
 
Text's unique knowledge-base enables you to <b>search</b>,
<b>classify</b>, manage documents, clusters and summarize

制限事項

CTX_DOC.SNIPPETでは、問合せテンプレートの使用はサポートされていません。

CTX_DOC.SNIPPETNULL_SECTION_GROUPで使用すると、コンテキスト内のマークアップ・キーワードが表示されます。ただし、XMLドキュメントでこのプロシージャを使用する場合は制限があります。XML_SECTION_GROUPまたはAUTO_SECTION_GROUPで使用すると、XML構造は無視され、ユーザーが指定したタグは外されます。したがって、戻される結果には、テキストの前後の部分が含まれることになります。

関連項目

THEMES

CTX_DOC.THEMESプロシージャを使用して、1つのドキュメントに対してテーマ・リストを1つ生成します。各テーマは、指定した結果表またはインメモリーPL/SQL表のいずれかに行として格納できます。


注意:

CTX_DOC.THEMESを使用するには、ナレッジ・ベースがインストールされている必要があります。ナレッジ・ベースは、Oracle Textとともにインストールされていない場合があります。ナレッジ・ベースの詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。

構文1: インメモリー表記憶域

CTX_DOC.THEMES(
index_name      IN VARCHAR2,
textkey         IN VARCHAR2,
restab          IN OUT NOCOPY THEME_TAB,
full_themes     IN BOOLEAN DEFAULT FALSE,
num_themes       IN NUMBER DEFAULT 50);

構文2: 結果表記憶域

CTX_DOC.THEMES(
index_name      IN VARCHAR2,
textkey         IN VARCHAR2,
restab          IN VARCHAR2,
query_id        IN NUMBER DEFAULT 0,
full_themes     IN BOOLEAN DEFAULT FALSE,
num_themes       IN NUMBER DEFAULT 50);
index_name

テキスト列の索引名を指定します。

textkey

一意のドキュメントのID(通常は主キー)を指定します。

textkeyパラメータは、次のいずれかです。

  • 単一列の主キーの値。

  • コンポジット(複数列)主キーのコード化された仕様。テキストキーがコンポジット・キーの場合は、CTX_DOC.PKENCODEプロシージャを使用して、コンポジットtextkey文字列をコード化する必要があります。

  • ドキュメントを含む行のROWID。

主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。

restab

このプロシージャが、結果を表またはインメモリーPL/SQL表のいずれかに格納することを指定できます。

結果を表に格納するには、表の名前を指定します。

結果をインメモリー表に格納するには、THEME_TAB型のインメモリー表の名前を指定します。THEME_TABデータ型は、次のように定義されます。

type theme_rec is record (
   theme varchar2(2000),
   weight number
);

type theme_tab is table of theme_rec index by binary_integer;

操作の前に、CTX_DOC.THEMESは、ユーザーが指定したTHEME_TABを消去します。

query_id

restabに挿入した行の識別に使用する識別子を指定します。

full_themes

このプロシージャが、各ドキュメント・テーマに対して単一のテーマを作成するか、親テーマ(全テーマ)の階層型リストを作成するかを指定します。

TRUEを指定すると、このプロシージャは全テーマを結果表のTHEME列に書き込みます。

FALSEを指定すると、このプロシージャは単一テーマ情報を結果表のTHEME列に書き込みます。これはデフォルトです。

num_themes

取り出すテーマの最大数を指定します。たとえば、10を指定すると、ドキュメントのテーマが最初の10個まで戻ります。デフォルトは50です。

0(ゼロ)またはNULLを指定すると、ドキュメント内の全テーマが戻ります。50を超えるテーマがドキュメントに格納されている場合、概念階層が表示されるのは、最初の50テーマのみです。

インメモリー・テーマ

次の例では、ドキュメント1の最初の10テーマを生成し、それをthe_themesというインメモリー表に格納します。その後、表全体をループし、ドキュメントのテーマを表示します。

declare
 the_themes ctx_doc.theme_tab;

begin
 ctx_doc.themes('myindex','1',the_themes, num_themes=>10);
 for i in 1..the_themes.count loop
  dbms_output.put_line(the_themes(i).theme||':'||the_themes(i).weight);
  end loop;
end;

テーマ表

次の例では、テーマ表CTX_THEMESを作成します。

create table CTX_THEMES (query_id number, 
                         theme varchar2(2000), 
                         weight number);

単一テーマ

リストの各要素が単一テーマである場合、最初の20テーマまでのリストを取得するには、次の文を入力します。

begin
 ctx_doc.themes('newsindex','34','CTX_THEMES',1,full_themes => FALSE, 
 num_themes=> 20);
end;

全テーマ

リストの各要素が親テーマの階層リストの場合、トップ20のテーマのリストを取得するには、次の文を入力します。

begin
ctx_doc.themes('newsindex','34','CTX_THEMES',1,full_themes => TRUE, num_
themes=>20);
end;

TOKENS

このプロシージャを使用して、ドキュメント内のすべてのテキスト・トークンを識別します。戻されるトークンは、索引に挿入されるトークンです。この機能は、ドキュメントの分類、ルーティングまたはクラスタ化を行う場合に有効です。

ストップワードは戻されません。セクション・タグは、テキスト・トークンではないため、戻されません。

構文1: インメモリー表記憶域

CTX_DOC.TOKENS(index_name      IN VARCHAR2,
               textkey         IN VARCHAR2,
               restab          IN OUT NOCOPY TOKEN_TAB);

構文2: 結果表記憶域

CTX_DOC.TOKENS(index_name      IN VARCHAR2,
               textkey         IN VARCHAR2,
               restab          IN VARCHAR2,
               query_id        IN NUMBER DEFAULT 0);
index_name

テキスト列の索引名を指定します。

textkey

一意のドキュメントのID(通常は主キー)を指定します。

textkeyパラメータは、次のいずれかです。

  • 単一列の主キーの値。

  • コンポジット(複数列)主キーのコード化された仕様。コンポジットtextkeyをコード化するには、CTX_DOC.PKENCODEプロシージャを使用します。

  • ドキュメントを含む行のROWID。

主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。

restab

このプロシージャが、結果を表またはインメモリーPL/SQL表のいずれかに格納することを指定できます。

戻されるトークンは、textkeyで指定したドキュメント(または行)の索引に挿入されるトークンです。ストップワードは戻されません。セクション・タグは、テキスト・トークンではないため、戻されません。

トークン表の指定

結果を表に格納するには、表の名前を指定します。トークン表には自由に名前を付けることができますが、次の表に示す名前およびデータ型を持つ列が組み込まれている必要があります。

表8-1 トークン表に必要な列

列名 データ型 説明

QUERY_ID

NUMBER

CTX_DOC.TOKENSへの特定のコールで生成された結果の識別子(複数のTOKENコールの結果を表に格納するときのみ移入されます)。

TOKEN

VARCHAR2(64)

テキスト内のトークン文字列。

OFFSET

NUMBER

ドキュメント内のトークンの位置(ドキュメントの開始位置1との相対的な位置)。

LENGTH

NUMBER

トークンの文字の長さ。


インメモリー表の指定

結果をインメモリー表に格納するには、TOKEN_TAB型のインメモリー表の名前を指定します。TOKEN_TABデータ型は、次のように定義されます。

type token_rec is record (
token varchar2(64),
offset number,
length number
);

type token_tab is table of token_rec index by binary_integer;

操作の前に、CTX_DOC.TOKENSは、ユーザーが指定したTOKEN_TABを消去します。

query_id

restabに挿入した行の識別に使用する識別子を指定します。

インメモリー・トークン

次の例では、ドキュメント1のトークンを生成し、それをインメモリー表に格納して、the_tokensとして宣言します。その後、表全体をループし、ドキュメントのトークンを表示します。

declare
 the_tokens ctx_doc.token_tab;

begin
 ctx_doc.tokens('myindex','1',the_tokens);
 for i in 1..the_tokens.count loop
  dbms_output.put_line(the_tokens(i).token);
  end loop;
end;