この章では、抽出したテキストのハイライトまたはドキュメントのテーマ・リストの生成などの、ドキュメント・サービスを要求するためのPL/SQLパッケージCTX_DOC
について説明します。
これらのプロシージャの多くには2種類があります。索引を使用するプロシージャと、索引を使用しないプロシージャです。索引を使用しないプロシージャは、ポリシーベースのプロシージャと呼ばれます。これらのプロシージャは、CONTEXT索引を事前作成せずに単一のドキュメント上でドキュメント・サービスを使用する場合があるために、提供されています。ポリシーベースのプロシージャを使用することで、このような処理を実行できます。
policy_*プロシージャは従来のメモリー内ドキュメント・サービスをミラー化し、index_nameをpolicy_nameに、textkeyをドキュメントのデータ型であるVARCHAR2
、CLOB
、BLOB
またはBFILE
に置き換えて使用されます。このため、これらのプロシージャを使用してドキュメント・サービス出力を取得するために索引を作成する必要はありません。
文字オフセットおよび長さを生成するプロシージャ(HIGHLIGHT
、TOKENS
など)について、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 |
ドキュメントのすべての索引トークンを生成します。 |
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);
textkeyで識別されるドキュメントを含むテキスト列に関連する索引の名前を指定します。
一意のドキュメントのID(通常は主キー)を指定します。
textkeyパラメータは、次のいずれかです。
単一列の主キーの値。
コンポジット(複数列)主キーのコード化された仕様。CTX_DOC.PKENCODEを使用します。
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。
このプロシージャで、マークアップされたテキストを表またはメモリー内CLOB
のどちらに格納するかを指定できます。
結果を表に格納するには、表の名前を指定します。このコールの実行前に、結果を格納する表が存在している必要があります。
結果をメモリーに格納するには、CLOB
ロケータの名前を指定します。restabがNULL
の場合は、一時CLOB
が割り当てられて戻ります。使用後は、DBMS_LOB.FREETEMPORARY()
でロケータの割当てを解除する必要があります。
restabがNULL
でない場合は、操作の前にCLOB
が切り捨てられます。
restabに挿入した行の識別に使用する識別子を指定します。
query_idが指定されていないか、またはNULL
に設定されている場合、デフォルトは0(ゼロ)です。restabに指定されている表を手動で切り捨てる必要があります。
プレーン・テキスト形式のドキュメントを生成するには、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;
ドキュメントの要点およびテーマ・サマリーを生成するには、CTX_DOC.GIST
プロシージャを使用します。段落レベルまたは文レベルの要点またはテーマ・サマリーを生成できます。
構文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);
textkeyで識別されるドキュメントを含むテキスト列に関連する索引の名前を指定します。
一意のドキュメントのID(通常は主キー)を指定します。
textkeyパラメータは、次のいずれかです。
単一列の主キーの値。
コンポジット(複数列)主キーのコード化された仕様。コンポジット・テキストキーをコード化するには、CTX_DOC.PKENCODE
プロシージャを使用します。
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPE
を使用します。
このプロシージャで、要点およびテーマ・サマリーを表またはメモリー内CLOB
のどちらに格納するかを指定します。
結果を表に格納するには、既存の表の名前を指定します。
結果をメモリーに格納するには、CLOB
ロケータの名前を指定します。restabがNULL
の場合は、一時CLOB
が割り当てられて戻ります。使用後は、ロケータの割当てを解除する必要があります。
restab
がNULL
でない場合は、操作の前にCLOB
が切り捨てられます。
restabに挿入した行の識別に使用する識別子を指定します。
生成する要点またはテーマ・サマリーのタイプを指定します。有効な値は、次のとおりです。
段落の場合はP
文の場合はS
デフォルトはPです。
要点または単一のテーマ・サマリーを生成するかどうかを指定します。生成される要点またはテーマ・サマリーのタイプ(文レベルまたは段落レベル)は、glevel
に指定した値によって決まります。
ドキュメント全体の要点を生成するには、pov
に値GENERIC
を指定します。ドキュメントの単一のテーマに対するテーマ・サマリーを生成するには、そのテーマをpov
の値として指定します。
結果表記憶域を使用しているときに、pov
の値を指定しない場合、このプロシージャはドキュメントに対して、全体の要点に加えて最大50個までのテーマ・サマリーを戻します。
メモリー内の結果記憶域をCLOB
に対して使用する場合は、pov
を指定する必要があります。ただし、pov
を指定しない場合、このプロシージャはドキュメントの全体の要点のみを生成します。
注意: pov パラメータでは、大/小文字が区別されます。ドキュメントの要点を戻すには、すべて大文字で「GENERIC 」を指定します。テーマ・サマリーを戻すには、ドキュメントに対して生成されたとおりのテーマを正確に指定します。
ドキュメントに対してTHEMESで生成されたテーマのみを、 |
ドキュメントの要点またはテーマ・サマリーに対して選択されたドキュメントの段落(または文)の最大数を指定します。デフォルトは16です。
注意: numParagraphs パラメータが使用されるのは、このパラメータによって生成される要点またはテーマ・サマリーのサイズが、maxPercent パラメータによって生成される要点またはテーマ・サマリーのサイズよりも小さいときのみです。
つまり、システムは、常に最小サイズの要点またはテーマ・サマリーを戻します。 |
ドキュメントの要点またはテーマ・サマリーに対して選択されたドキュメントの段落(または文)の最大数を、ドキュメントの合計段落数(または合計文数)に対する割合で指定します。デフォルトは10です。
注意: numParagraphs パラメータが使用されるのは、このパラメータによって生成される要点またはテーマ・サマリーのサイズが、maxPercent パラメータによって生成される要点またはテーマ・サマリーのサイズよりも小さいときのみです。
つまり、システムは、常に最小サイズの要点またはテーマ・サマリーを戻します。 |
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;
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);
textkeyで識別されるドキュメントを含むテキスト列に関連する索引の名前を指定します。
一意のドキュメントのID(通常は主キー)を指定します。
textkeyパラメータは、次のいずれかです。
単一列の主キーの値。
コンポジット(複数列)主キーのコード化された仕様。CTX_DOC.PKENCODEプロシージャを使用します。
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。
ドキュメントを取り出すために使用された元の問合せ式を指定します。NULLの場合、ハイライトは生成されません。
text_query
にワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、HIGHLIGHT
はストップワードをハイライト表示しません。
text_query
にTHRESHOLD演算子がある場合、その演算子は無視されます。HIGHLIGHT
プロシージャは、常に結果セット全体に対するハイライト情報を戻します。
このプロシージャが、ハイライト・オフセットを表またはメモリー内PL/SQL表のいずれかに格納することを指定できます。
結果を表に格納するには、表の名前を指定します。このプロシージャのコール前に、表が存在している必要があります。
結果をメモリー内表に格納するには、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
を消去します。
restabに挿入した行の識別に使用する識別子を指定します。
query_idが指定されていないか、またはNULL
に設定されている場合、デフォルトは0(ゼロ)です。restabに指定されている表を手動で切り捨てる必要があります。
プレーン・テキスト・オフセットのドキュメントを生成するには、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属性値のハイライト表示もサポートされていません。
関連項目
バイナリ・データをテキストにフィルタ処理します。
このプロシージャは、バイナリ・データ(BLOB IN
)を取り出し、そのデータをAUTO_FILTER
フィルタでフィルタ処理し、そのテキスト形式データをCLOB
に書き込みます。(元のドキュメント内の図形はすべて無視されます。)CTX_DOC.IFILTER
ではセーフ・コールアウトを使用しており、索引は不要です。CTX_DOC.FILTER
の場合は、索引が必要です。
要件
CTX_DOC.IFILTER
では、セーフ・コールアウト・メカニズムを使用しているため、extproc
エージェントの起動には、SQL*Netリスナーの実行と構成が必要です。
構文
CTX_DOC.IFILTER(data IN BLOB, text IN OUT NOCOPY CLOB);
フィルタ処理するバイナリ・データを指定します。
宛先の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 doc_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;
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);
textkeyで識別されるドキュメントを含むテキスト列に関連する索引の名前を指定します。
一意のドキュメントのID(通常は主キー)を指定します。
textkeyパラメータは、次のいずれかです。
単一列の主キーの値。
コンポジット(複数列)主キーのコード化された仕様。CTX_DOC.PKENCODEプロシージャを使用します。
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。
ドキュメントを取り出すために使用された元の問合せ式を指定します。
text_queryにワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、MARKUP
はストップワードをハイライト表示しません。
text_queryにTHRESHOLD演算子がある場合、その演算子は無視されます。MARKUP
プロシージャは、常に結果セット全体に対するハイライト情報を戻します。
このプロシージャで、マークアップされたテキストを表またはメモリー内CLOB
のどちらに格納するかを指定できます。
結果を表に格納するには、表の名前を指定します。このプロシージャのコール前に、結果表が存在している必要があります。
結果をメモリーに格納するには、CLOBロケータの名前を指定します。restabがNULL
の場合は、一時CLOBが割り当てられて戻ります。使用後は、ロケータの割当てを解除する必要があります。
restabがNULL
でない場合は、操作の前にCLOBが切り捨てられます。
restabに挿入した行の識別に使用する識別子を指定します。
query_idが指定されていないか、またはNULL
に設定されている場合、デフォルトは0(ゼロ)です。restabに指定されている表を手動で切り捨てる必要があります。
プレーン・テキストのマークアップ・ドキュメントを生成するには、TRUE
を指定します。AUTO_FILTER
フィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSE
を指定してマークアップされたHTML形式のドキュメントを生成します。
次の事前定義済のタグセットの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><</A> |
|
nexttag | <A HREF=#ctx%NEXTNUM>></A> |
ハイライト表示された語句の開始を示すために、MARKUP
によって挿入された文字を指定します。
ハイライト表示されたワードに対するstarttag、endtag、prevtagおよびnexttagの順序は、次のとおりです。
... prevtag starttag word endtag nexttag...
ハイライト表示された語句の終了を示すために、MARKUP
によって挿入された文字を指定します。
前のハイライト表示された部分にユーザーをナビゲートするタグを定義するマークアップ順序を指定します。
マークアップ順序prevtagおよびnexttagで、動的に設定される次のオフセット変数を指定できます。
オフセット変数 | 値 |
---|---|
%CURNUM |
現在のオフセット番号 |
%PREVNUM |
前のオフセット番号 |
%NEXTNUM |
次のオフセット番号 |
例については、HTML_NAVIGATE
タグセットの記述を参照してください。
次のハイライト表示された部分にユーザーをナビゲートするタグを定義するマークアップ順序を指定します。
マークアップ順序内で、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);
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;
ドキュメント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
では、問合せテンプレートの使用はサポートされていません。
関連項目
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;
各PK引数はコンポジット・テキストキー・リストの列要素を指定します。最大16列の要素をコード化できます。
戻り値
コンポジット・テキストキーのコード化された値を表す文字列です。
例
begin ctx_doc.gist('newsindex',CTX_DOC.PKENCODE('smith', 14), 'CTX_GIST'); end;
この例のsmithおよび14は、ドキュメントのコンポジット・テキストキーの値を構成します。
プレーン・テキストまたは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);
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。
フィルタ処理するドキュメントを指定します。
CLOBロケータの名前を指定します。
プレーン・テキスト形式のドキュメントを生成するには、TRUE
を指定します。AUTO_FILTER
フィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSE
を指定してHTML形式のドキュメントを生成します。
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。第2章「Oracle Text索引付けの要素」の「BASIC_LEXER」を参照してください。
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、第1章「Oracle TextのSQL文と演算子」の「CREATE INDEX」のフォーマット列の説明を参照してください。
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。詳細は、第2章「Oracle Text索引付けの要素」の「複合キャラクタ・セット列の索引付け」を参照してください。
ドキュメントの要点またはテーマ・サマリーを生成します。段落レベルまたは文レベルの要点またはテーマ・サマリーを生成できます。このプロシージャでは、CONTEXT
索引は不要です。
構文
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 );
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。
要点またはテーマ・サマリーを生成するドキュメントを指定します。
CLOBロケータの名前を指定します。
生成する要点またはテーマ・サマリーのタイプを指定します。有効な値は、次のとおりです。
段落の場合はP
文の場合はS
デフォルトはPです。
要点または単一のテーマ・サマリーを生成するかどうかを指定します。生成される要点またはテーマ・サマリーのタイプ(文レベルまたは段落レベル)は、glevel
に指定した値によって決まります。
ドキュメント全体の要点を生成するには、pov
に値GENERICを指定します。ドキュメントの単一のテーマに対するテーマ・サマリーを生成するには、そのテーマをpov
の値として指定します。
結果表記憶域を使用し、pov
の値を指定しない場合、このプロシージャはドキュメントに対して、全体の要点に加えて最大50個までのテーマ・サマリーを戻します。
注意: pov パラメータでは、大/小文字が区別されます。ドキュメントの要点を戻すには、すべて大文字で「GENERIC 」を指定します。テーマ・サマリーを戻すには、ドキュメントに対して生成されたとおりのテーマを正確に指定します。
ドキュメントに対してTHEMESで生成されたテーマのみを、 |
ドキュメントの要点またはテーマ・サマリーに対して選択されたドキュメントの段落(または文)の最大数を指定します。デフォルトは16です。
注意: numParagraphs パラメータが使用されるのは、このパラメータによって生成される要点またはテーマ・サマリーのサイズが、maxPercent パラメータによって生成される要点またはテーマ・サマリーのサイズよりも小さいときのみです。
つまり、システムは、常に最小サイズの要点またはテーマ・サマリーを戻します。 |
ドキュメントの要点またはテーマ・サマリーに対して選択されたドキュメントの段落(または文)の最大数を、ドキュメントの合計段落数(または合計文数)に対する割合で指定します。デフォルトは10です。
注意: numParagraphs パラメータが使用されるのは、このパラメータによって生成される要点またはテーマ・サマリーのサイズが、maxPercent パラメータによって生成される要点またはテーマ・サマリーのサイズよりも小さいときのみです。
つまり、システムは、常に最小サイズの要点またはテーマ・サマリーを戻します。 |
pov
の値を指定しない場合は、生成するテーマ・サマリーの数を指定します。たとえば、10を指定すると、トップ10のテーマ・サマリーが戻ります。デフォルトは50です。
0(ゼロ)またはNULLを指定すると、ドキュメント内の全テーマが戻ります。51以上のテーマがドキュメントに格納されている場合、概念階層が表示されるのは、トップ50のテーマのみです。
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。「MULTI_LEXER」を参照してください。
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。
プレーン・テキストまたは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 );
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。
ハイライト表示するオフセット情報を生成するドキュメントを指定します。
ドキュメントを取り出すために使用された元の問合せ式を指定します。NULLの場合、ハイライトは生成されません。
text_query
にワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、このプロシージャはストップワードをハイライト表示しません。
text_query
にTHRESHOLD演算子がある場合、その演算子は無視されます。このプロシージャは、常に結果セット全体に対するハイライト情報を戻します。
highlight_tab
PL/SQL索引付き表型の名前を指定します。
プレーン・テキスト・オフセットのドキュメントを生成するには、TRUE
を指定します。
AUTO_FILTER
フィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSE
を指定してドキュメントのHTMLオフセットを生成します。
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。第2章「Oracle Text索引付けの要素」の「MULTI_LEXER」を参照してください。
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。
制限事項
CTX_DOC.POLICY_HIGHLIGHT
では、問合せテンプレートの使用はサポートされていません。
問合せ語句がハイライト表示されているドキュメントのプレーン・テキストまたは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 );
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。
ハイライト表示するオフセット情報を生成するドキュメントを指定します。
ドキュメントを取り出すために使用された元の問合せ式を指定します。
text_query
にNULLが含まれている場合、このプロシージャは失敗し、エラーが生成されます。
text_query
にワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、このプロシージャはストップワードをハイライト表示しません。
text_query
にTHRESHOLD演算子がある場合、その演算子は無視されます。このプロシージャは、常に結果セット全体に対するハイライト情報を戻します。
CLOB
ロケータの名前を指定します。
プレーン・テキストのマークアップ・ドキュメントを生成するには、TRUE
を指定します。AUTO_FILTER
フィルタを使用している場合またはHTMLドキュメントを索引付けしている場合は、FALSE
を指定してマークアップされたHTML形式のドキュメントを生成します。
次の事前定義済のタグセットの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><</A> |
|
nexttag | <A HREF=#ctx%NEXTNUM>></A> |
ハイライト表示された語句の開始を示すために、MARKUP
によって挿入された文字を指定します。
ハイライト表示されたワードに対するstarttag、endtag、prevtagおよびnexttagの順序は、次のとおりです。
... prevtag starttag word endtag nexttag...
ハイライト表示された語句の終了を示すために、MARKUP
によって挿入された文字を指定します。
前のハイライト表示された部分にユーザーをナビゲートするタグを定義するマークアップ順序を指定します。
マークアップ順序prevtagおよびnexttagで、動的に設定される次のオフセット変数を指定できます。
オフセット変数 | 値 |
---|---|
%CURNUM |
現在のオフセット番号 |
%PREVNUM |
前のオフセット番号 |
%NEXTNUM |
次のオフセット番号 |
例については、HTML_NAVIGATE
タグセットの記述を参照してください。
次のハイライト表示された部分にユーザーをナビゲートするタグを定義するマークアップ順序を指定します。
マークアップ順序内で、prevtagに使用するものと同じオフセット変数を使用できます。例については、prevtagおよびHTML_NAVIGATE
タグセットの記述を参照してください。
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。第2章「Oracle Text索引付けの要素」の「MULTI_LEXER」を参照してください。
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。詳細は、第2章「Oracle Text索引付けの要素」の「複合キャラクタ・セット列の索引付け」を参照してください。
制限事項
CTX_DOC.POLICY_MARKUP
では、問合せテンプレートの使用はサポートされていません。
コンテキスト内のマークアップ・キーワードを表示します。戻されたテキストに含まれるのは、ワード問合せを満たすワードまたは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 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;
CTX_DDL.CREATE_POLICY
を使用して作成されたポリシーの名前を指定します。
キーワード検索の対象となるドキュメントを指定します。
ドキュメントを取り出すために使用された元の問合せ式を指定します。NULLの場合、ハイライトは生成されません。
text_query
にワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、POLICY_SNIPPET
はストップワードをハイライト表示しません。
text_query
にTHRESHOLD演算子がある場合、その演算子は無視されます。
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。第2章「Oracle Text索引付けの要素」の「MULTI_LEXER」を参照してください。
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、Oracle Textでサポートされている値を使用します。詳細は、第2章「Oracle Text索引付けの要素」の「複合キャラクタ・セット列の索引付け」を参照してください。
問合せキーワードのマークアップ用の開始タグを指定します。デフォルトは<b>です。
問合せキーワードのマークアップ用の終了タグを指定します。デフォルトは</b>です。
HTMLエンティティを変換させるかどうかを指定します。デフォルトはTRUEで、プロシージャによって出力される際、特殊エンティティ(<、>、&)が代替形式(<、>、&)に変換されます。ただし、CTX_DOC.POLICY_SNIPPET
によって生成されたマークアップ・タグ内の特殊文字は変換されません。
戻される複数の異なるフラグメントを区切る文字列を指定します。デフォルトは<b>...</b>です。
制限事項
CTX_DOC.POLICY_SNIPPET
では、問合せテンプレートの使用はサポートされていません。
CTX_DOC.POLICY_SNIPPET
をNULL_SECTION_GROUP
で使用すると、コンテキスト内のマークアップ・キーワードが表示されます。ただし、XMLドキュメントでこのプロシージャを使用する場合は制限があります。XML_SECTION_GROUP
またはAUTO_SECTION_GROUP
で使用すると、XML構造は無視され、ユーザーが指定したタグは外されます。したがって、戻される結果には、テキストの前後の部分が含まれることになります。
関連項目
ドキュメントのテーマのリストを生成します。このプロシージャでは、CONTEXT
索引は不要です。
構文
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 );
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーを指定します。
テーマのリストを生成するドキュメントを指定します。
theme_tab
PL/SQL索引付き表型の名前を指定します。
このプロシージャが、各ドキュメント・テーマに対して単一のテーマを作成するか、親テーマ(全テーマ)の階層型リストを作成するかを指定します。
TRUE
を指定すると、このプロシージャは全テーマを結果表のTHEME
列に書き込みます。
FALSE
を指定すると、このプロシージャは単一テーマ情報を結果表のTHEME
列に書き込みます。これはデフォルトです。
取り出すテーマの最大数を指定します。たとえば、10を指定すると、ドキュメントのテーマが最初の10個まで戻ります。デフォルトは50です。
0(ゼロ)またはNULL
を指定すると、ドキュメント内の全テーマが戻ります。51以上のテーマがドキュメントに格納されている場合、概念階層が表示されるのは、最初の50テーマのみです。
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。第2章「Oracle Text索引付けの要素」の「MULTI_LEXER」を参照してください。
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、第1章「Oracle TextのSQL文と演算子」の「CREATE INDEX」のフォーマット列の説明を参照してください。
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、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;
ドキュメントのすべての索引トークンを生成します。このプロシージャでは、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);
CTX_DDL.CREATE_POLICYを使用して作成されたポリシーの名前を指定します。
トークンを生成するドキュメントを指定します。
token_tab
PL/SQL索引付き表型の名前を指定します。
戻されるトークンは、ドキュメントの索引に挿入されるトークンです。ストップワードは戻されません。セクション・タグは、テキスト・トークンではないため、戻されません。
ドキュメントの言語を指定します。元表の言語列で使用する、Oracle Textでサポートされている言語の値を使用します。第2章「Oracle Text索引付けの要素」の「MULTI_LEXER」を参照してください。
ドキュメントの形式を指定します。元表のフォーマット列で指定する、Oracle Textでサポートされているフォーマットの値(TEXT、BINARYまたはIGNOREのいずれか)を使用します。詳細は、「CREATE INDEX」のフォーマット列の説明を参照してください。
ドキュメントのキャラクタ・セットを指定します。元表のキャラクタ・セット列で指定する、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;
このプロシージャを使用してCTX_DOC
プロシージャを設定し、ROWID
またはPRIMARY_KEY
のドキュメントの識別子を受け取ります。この設定は、セッションの起動にのみ影響を与えます。
構文
ctx_doc.set_key_type(key_type in varchar2);
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
ドキュメントの用語索引を作成するには、CTX_DOC.SNIPPET
プロシージャを使用します。用語索引とは、問合せ語句とその前後のテキストを含むテキストの断片(フラグメント)です。この用語索引は、マークアップされた問合せキーワードを前後のテキストと一緒に戻すため、文脈付きキーワード(KWIC)としても知られており、ユーザーは問合せキーワードを文脈で評価できます。戻されたテキストには、ABOUT
問合せを満たすテーマが含まれていることもあります。
たとえば、brilligとslitheyの検索では、ドキュメントの関連フラグメントが戻される場合もあります。
'Twas <b>brillig</b>, and the <b>slithey</b> toves did gyre and
CTX_DOC.SNIPPET
は、問合せ語句を含んでいるドキュメントを対象として、関連性の最も高い1つ以上のフラグメントを戻します。CTX_DOC.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 CLOB, 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;
テキスト列の索引名を指定します。
一意のドキュメントのID(通常は主キー)を指定します。
textkeyパラメータは、次のいずれかです。
単一列の主キーの値。
コンポジット(複数列)主キーのコード化された仕様。テキストキーがコンポジット・キーの場合は、CTX_DOC.PKENCODE
プロシージャを使用して、コンポジット・テキストキー文字列をコード化する必要があります。
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPE
を使用します。
ドキュメントを取り出すために使用された元の問合せ式を指定します。NULLの場合、ハイライトは生成されません。
text_query
にワイルド・カード、ステミング、ファジー・マッチングが指定されていて、結果としてストップワードが戻る場合、SNIPPET
はストップワードをハイライト表示しません。
text_query
にTHRESHOLD演算子がある場合、その演算子は無視されます。
問合せキーワードのマークアップ用の開始タグを指定します。デフォルトは<b>です。
問合せキーワードのマークアップ用の終了タグを指定します。デフォルトは</b>です。
HTMLエンティティを変換させるかどうかを指定します。デフォルトはTRUEで、プロシージャによって出力される際、特殊エンティティ(<、>、&)が代替形式(<、>、&)に変換されます。ただし、CTX_DOC.SNIPPET
によって生成されたマークアップ・タグ内の特殊文字は変換されません。
戻される複数の異なるフラグメントを区切る文字列を指定します。デフォルトは<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.SNIPPET
をNULL_SECTION_GROUP
で使用すると、コンテキスト内のマークアップ・キーワードが表示されます。ただし、XMLドキュメントでこのプロシージャを使用する場合は制限があります。XML_SECTION_GROUP
またはAUTO_SECTION_GROUP
で使用すると、XML構造は無視され、ユーザーが指定したタグは外されます。したがって、戻される結果には、テキストの前後の部分が含まれることになります。
関連項目
CTX_DOC.THEMES
プロシージャを使用して、1つのドキュメントに対してテーマ・リストを1つ生成します。各テーマは、指定した結果表またはメモリー内PL/SQL表のいずれかに行として格納できます。
構文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);
テキスト列の索引名を指定します。
一意のドキュメントのID(通常は主キー)を指定します。
textkeyパラメータは、次のいずれかです。
単一列の主キーの値。
コンポジット(複数列)主キーのコード化された仕様。テキストキーがコンポジット・キーの場合は、CTX_DOC.PKENCODE
プロシージャを使用して、コンポジットtextkey文字列をコード化する必要があります。
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPE
を使用します。
このプロシージャが、結果を表またはメモリー内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
を消去します。
restabに挿入した行の識別に使用する識別子を指定します。
このプロシージャが、各ドキュメント・テーマに対して単一のテーマを作成するか、親テーマ(全テーマ)の階層型リストを作成するかを指定します。
TRUE
を指定すると、このプロシージャは全テーマを結果表のTHEME
列に書き込みます。
FALSE
を指定すると、このプロシージャは単一テーマ情報を結果表のTHEME
列に書き込みます。これはデフォルトです。
取り出すテーマの最大数を指定します。たとえば、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, numthemes=>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;
このプロシージャを使用して、ドキュメント内のすべてのテキスト・トークンを識別します。戻されるトークンは、索引に挿入されるトークンです。この機能は、ドキュメントの分類、ルーティングまたはクラスタ化を行う場合に有効です。
ストップワードは戻されません。セクション・タグは、テキスト・トークンではないため、戻されません。
構文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);
テキスト列の索引名を指定します。
一意のドキュメントのID(通常は主キー)を指定します。
textkeyパラメータは、次のいずれかです。
単一列の主キーの値。
コンポジット(複数列)主キーのコード化された仕様。コンポジットtextkeyをコード化するには、CTX_DOC.PKENCODEプロシージャを使用します。
ドキュメントを含む行のROWID。
主キーとROWIDの識別を切り替えるには、CTX_DOC.SET_KEY_TYPEを使用します。
このプロシージャが、結果を表またはメモリー内PL/SQL表のいずれかに格納することを指定できます。
戻されるトークンは、textkeyで指定したドキュメント(または行)の索引に挿入されるトークンです。ストップワードは戻されません。セクション・タグは、テキスト・トークンではないため、戻されません。
トークン表の指定
結果を表に格納するには、表の名前を指定します。トークン表には自由に名前を付けることができますが、次の表に示す名前およびデータ型を持つ列が組み込まれている必要があります。
表8-1 トークン表に必要な列
列名 | データ型 | 説明 |
---|---|---|
|
|
|
|
|
テキスト内のトークン文字列。 |
|
|
ドキュメント内のトークンの位置(ドキュメントの開始位置1との相対的な位置)。 |
|
|
トークンの文字の長さ。 |
メモリー内表の指定
結果をメモリー内表に格納するには、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
を消去します。
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;