12 CTX_QUERYパッケージ
この章では、問合せフィードバックの生成、ヒット数のカウントおよびストアド・クエリー式の生成に使用できるPL/SQLパッケージCTX_QUERY
について説明します。
CTX_QUERY
パッケージには、次のプロシージャおよびファンクションが含まれています。
名前 | 説明 |
---|---|
索引内のシード・ワードに関するワードを戻します。 |
|
問合せへのヒット数を戻します。 |
|
問合せ式の解析および拡張情報を生成します。 |
|
階層問合せフィードバック情報(上位語、下位語および関連語)を生成します。 |
|
指定したストアド・クエリー式をSQL表から削除します。 |
|
問合せを実行して、結果セットを生成します。 |
|
問合せを実行して、 |
|
CONTAINS問合せのカーソルを明示的にクローズした後で、問合せテンプレートに<ctx_result_set_descriptor>要素がある場合に、結果セット・ドキュメントを保持します。 |
|
問合せを実行して、その結果をストアド・クエリー式表に格納します。 |
ノート:
このパッケージを使用できるのは、索引タイプがCONTEXT
の場合のみです。このパッケージは、CTXCAT
の索引タイプをサポートしていません。
CTX_QUERY
パッケージのAPIは、スキーマまたは所有者名を接頭辞として使用する識別子をサポートしていません。
12.1 BROWSE_WORDS
このプロシージャを使用すると、Oracle Textの索引内のワードをブラウズできます。シード・ワードを指定すると、BROWSE_WORDS
は索引内のそのシード・ワードに関するワード、および各ワードが含まれているドキュメントのおよその数を戻します。
この機能は、問合せの詳細化に有効です。次のワードを識別できます。
-
非選択的ワード(そのワードを含むドキュメント件数が少ないワード)
-
ドキュメント・セットの中でスペルが間違っているワード
構文1: 表への結果の格納
ctx_query.browse_words(
index_name IN VARCHAR2, seed IN VARCHAR2, restab IN VARCHAR2, browse_id IN NUMBER DEFAULT 0, numwords IN NUMBER DEFAULT 10, direction IN VARCHAR2 DEFAULT BROWSE_AROUND, part_name IN VARCHAR2 DEFAULT NULL
);
構文2: メモリーへの結果の格納
ctx_query.browse_words(
index_name IN VARCHAR2, seed IN VARCHAR2, resarr IN OUT BROWSE_TAB, numwords IN NUMBER DEFAULT 10, direction IN VARCHAR2 DEFAULT BROWSE_AROUND, part_name IN VARCHAR2 DEFAULT NULL
);
- index
-
索引の名前を指定します。
schema.name
で指定できます。ローカル索引である必要があります。 - seed
-
シード・ワードを指定します。このワードは、ブラウズ拡張の前にレクサー処理されます。ワードがトークン表に存在する必要はありません。seedは単一のワードである必要があります。複数のワードをシードとして使用すると、エラーになります。
- restab
-
結果表の名前を指定します。restabは、
schema.name
として入力できます。このプロシージャのコール前に、表が存在している必要があります。また、表に対するINSERT
権限が必要です。この表は、次のスキーマを持つ必要があります。列 データ型 browse_id
number
word
varchar2(64)
doc_count
number
restabの中にある行が、
BROWSE_WORDS
がコールされる前に削除されることはありません。 - resarr
-
結果配列の名前を指定します。
resarr
はctx_query.browse_tab
型です。type browse_rec is record ( word varchar2(64), doc_count number ); type browse_tab is table of browse_rec index by binary_integer;
- browse_id
-
0から232の間で数値識別子を指定します。このブラウズのために生成された行は、
restab
の中のbrowse_id
列に値を持ちます。browse_id
を指定しない場合、デフォルトは0(ゼロ)です。 - numwords
-
戻すワード数を指定します。
- direction
-
ブラウズの方向を指定します。次のいずれかを指定できます。
値 動作 BEFORE
シード・ワードおよびシードの前のワードをアルファベット順にブラウズします。
AROUND
シード・ワードおよびシードの前後のワードをアルファベット順にブラウズします。
AFTER
シード・ワードおよびシードの後のワードをアルファベット順にブラウズします。
記号
CTX_QUERY.BROWSE_BEFORE
、CTX_QUERY.BROWSE_AROUND
およびCTX_QUERY.BROWSE_AFTER
も、これらのリテラル値に対して定義されています。 - part_name
-
ブラウズする索引パーティション名を指定します。
例
結果表でのワードのブラウズ
begin ctx_query.browse_words('myindex','dog','myres',numwords=>5,direction=>'AROUND'); end; select word, doc_count from myres order by word; WORD DOC_COUNT -------- ---------- CZAR 15 DARLING 5 DOC 73 DUNK 100 EAR 3
結果配列でのワードのブラウズ
set serveroutput on; declare resarr ctx_query.browse_tab; begin ctx_query.browse_words('myindex','dog',resarr,5,CTX_QUERY.BROWSE_AROUND); for i in 1..resarr.count loop dbms_output.put_line(resarr(i).word || ':' || resarr(i).doc_count); end loop; end;
12.2 COUNT_HITS
指定した問合せへのヒット数を戻します。実測または予測モードでCOUNT_HITS
をコールできます。実測モードは問合せへの正確なヒット数を戻します。予測モードは上限の見積りを戻しますが、実測モードよりも高速に実行します。
構文
構文1
exec CTX_QUERY.COUNT_HITS( index_name IN VARCHAR2, text_query IN VARCHAR2, exact IN BOOLEAN DEFAULT TRUE, part_name IN VARCHAR2 DEFAULT NULL ) RETURN NUMBER;
構文2
exec CTX_QUERY.COUNT_HITS_CLOB_QUERY( index_name IN VARCHAR2, text_query IN CLOB, exact IN BOOLEAN DEFAULT TRUE, part_name IN VARCHAR2 DEFAULT NULL ) RETURN NUMBER;
- index_name
-
索引の名前を指定します。
- text_query
-
問合せを指定します。
- exact
-
実測カウントには
TRUE
を指定します。上限を見積るにはFALSE
を指定します。FALSE
を指定することによって戻された数値はあまり正確ではありませんが、より高速に実行されます。FULL
索引が最後に最適化されてから行が更新または削除されている場合、FALSE
を指定すると高すぎる数値が返されることがあります。このような不適切なヒットは完全モードでの最適化によって削除され、FALSE
に設定されたEXACT
と、TRUE
に設定されたEXACT
の戻す数値が同一になります。 - part_name
-
問い合せる索引パーティション名を指定します。
12.3 EXPLAIN
問合せ式に関する実行計画情報を生成するには、CTX_QUERY.EXPLAIN
を使用します。実行
計画では、テキスト問合せ式に対して解析ツリーがグラフィカル表示されます。この情報は結果表に格納されます。
このプロシージャは問合せを実行しません。かわりに、問合せの入力前に、その問合せの拡張および解析の方法をユーザーに知らせます。これは、特にSTEM、ワイルド・カード、シソーラス、FUZZY、SOUNDEXまたはABOUT問合せに有効です。解析ツリーには、次の情報も表示されます。
Oracle Textによる問合せの評価方法を理解しておくと、問合せの詳細化やデバッグを行うときに役立ちます。また、実行計画情報を使用してユーザーがより高度な問合せを作成できるように、アプリケーションを設計できます。
構文
構文1
exec CTX_QUERY.EXPLAIN(
index_name IN VARCHAR2, text_query IN VARCHAR2, explain_table IN VARCHAR2, sharelevel IN NUMBER DEFAULT 0, explain_id IN VARCHAR2 DEFAULT NULL, part_name IN VARCHAR2 DEFAULT NULL
);
構文2
exec CTX_QUERY.EXPLAIN_CLOB_QUERY( index_name IN VARCHAR2, text_query IN CLOB, explain_table IN VARCHAR2, sharelevel IN NUMBER DEFAULT 0, explain_id IN VARCHAR2 DEFAULT NULL, part_name IN VARCHAR2 DEFAULT NULL );
- index_name
-
問い合せる索引名を指定します。
- text_query
-
行を選択する基準として使用する問合せ式を指定します。
text_query
にワイルド・カード、FUZZYまたはSOUNDEX演算子が含まれている場合、このプロシージャは索引表を調べて拡張を判断します。ワイルド・カード、FUZZY(?)およびSOUNDEX(!)式のフィードバックでは、通常の問合せで削除が遅延した場合、その理由を判断できません。
- explain_table
-
text_queryに対する解析ツリー表現の格納に使用する表の名前を指定します。
EXPLAIN
からの結果を格納するには、表に対して少なくともINSERT
権限およびDELETE
権限が必要です。関連項目:
実行計画表の構造の詳細は、「Oracle Text結果表」の「EXPLAIN表」を参照してください。
- sharelevel
-
explain_table
を複数のEXPLAIN
コールで共有するかどうかを指定します。排他使用には0(ゼロ)を、共有使用には1を指定します。デフォルトは0(排他使用)です。0(ゼロ)を指定すると、システムは次の
EXPLAIN
のコールの前に自動的に結果表を切り捨てます。共有使用の1を指定すると、このプロシージャは結果表を切り捨てません。同じ
explain_id
を持つ結果のみが更新されます。同じexplain_id
の結果が存在しない場合は、新しい結果が実行計画表に追加されます。 - explain_id
-
複数の
EXPLAIN
コールが同じ共有EXPLAIN
表を使用する場合は、EXPLAIN
プロシージャが戻した実行計画結果を識別する名前を指定します。デフォルトはNULL
です。 - part_name
-
問い合せる索引パーティション名を指定します。
例
たとえば、test_explain
という名前の実行計画表を作成するには、次のSQL文を使用します。
create table test_explain( explain_id varchar2(30), id number, parent_id number, operation varchar2(30), options varchar2(30), object_name varchar2(255), position number, cardinality number);
comp% OR ?smithなどの問合せ式の拡張を取得するには、次のようにCTX_QUERY.EXPLAIN
を使用します。
ctx_query.explain( index_name => 'newindex', text_query => 'comp% OR ?smith', explain_table => 'test_explain', sharelevel => 0, explain_id => 'Test');
実行計画表を読み込むには、次のように列を選択できます。
select explain_id, id, parent_id, operation, options, object_name, position from test_explain order by id;
次のように、出力はID順に並べられ、階層問合せをシミュレートします。
EXPLAIN_ID ID PARENT_ID OPERATION OPTIONS OBJECT_NAME POSITION ----------- ---- --------- ------------ ------- ----------- -------- Test 1 0 OR NULL NULL 1 Test 2 1 EQUIVALENCE NULL COMP% 1 Test 3 2 WORD NULL COMPTROLLER 1 Test 4 2 WORD NULL COMPUTER 2 Test 5 1 EQUIVALENCE (?) SMITH 2 Test 6 5 WORD NULL SMITH 1 Test 7 5 WORD NULL SMYTHE 2
制限事項
CTX_QUERY.EXPLAIN
では、問合せテンプレートの使用はサポートされていません。
リモート問合せでCTX_QUERY.EXPLAIN
は使用できません。
12.4 HFEEDBACK
英語またはフランス語の場合、このプロシージャは、指定された問合せへの階層問合せフィードバック情報(上位語、下位語および関連語)を生成します。
上位語、下位語および関連語情報はナレッジ・ベースから取得されます。ただし、索引中にも存在するナレッジ・ベース語句のみが、問合せフィードバック情報として戻ります。これによって、HFEEDBACK
プロシージャから戻された語句が、現在索引付けされているドキュメント・セットよりヒットする可能性が高くなります。
階層問合せフィードバック情報は、他の問合せ語句をユーザーに提示する場合に有効です。
構文
構文1
exec CTX_QUERY.HFEEDBACK( index_name IN VARCHAR2, text_query IN VARCHAR2, feedback_table IN VARCHAR2, sharelevel IN NUMBER DEFAULT 0, feedback_id IN VARCHAR2 DEFAULT NULL, part_name IN VARCHAR2 DEFAULT NULL );
構文2
exec CTX_QUERY.HFEEDBACK_CLOB_QUERY( index_name IN VARCHAR2, text_query IN CLOB, feedback_table IN VARCHAR2, sharelevel IN NUMBER DEFAULT 0, feedback_id IN VARCHAR2 DEFAULT NULL, part_name IN VARCHAR2 DEFAULT NULL );
- index_name
-
問い合せるテキスト列の索引の名前を指定します。
- text_query
-
行を選択する基準として使用する問合せ式を指定します。
- feedback_table
-
フィードバック語の格納に使用する表の名前を指定します。
関連項目:
実行計画表の構造の詳細は、「Oracle Text結果表」の「HFEEDBACK表」を参照してください。
- sharelevel
-
feedback_table
を複数のHFEEDBACK
コールで共有するかどうかを指定します。排他使用には0(ゼロ)を、共有使用には1を指定します。デフォルトは0(排他使用)です。0(ゼロ)を指定すると、システムは次の
HFEEDBACK
のコールの前に自動的にフィードバック表を切り捨てます。共有使用の1を指定すると、このプロシージャはフィードバック表を切り捨てません。同じ
feedback_id
を持つ結果のみが更新されます。同じfeedback_idの結果が存在しない場合は、新しい結果がフィードバック表に追加されます。 - feedback_id
-
複数の
HFEEDBACK
コールが同じ共有フィードバック表を使用する場合は、HFEEDBACK
のコールによって戻されたフィードバック結果を識別する値を指定します。デフォルトはNULL
です。 - part_name
-
問い合せる索引パーティション名を指定します。
例
CTX_QUERY.HFEEDBACK
で使用する結果表を次のように作成します。
CREATE TABLE restab ( feedback_id VARCHAR2(30), id NUMBER, parent_id NUMBER, operation VARCHAR2(30), options VARCHAR2(30), object_name VARCHAR2(80), position NUMBER, bt_feedback ctxsys.ctx_feedback_type, rt_feedback ctxsys.ctx_feedback_type, nt_feedback ctxsys.ctx_feedback_type, NESTED TABLE bt_feedback STORE AS res_bt, NESTED TABLE rt_feedback STORE AS res_rt, NESTED TABLE nt_feedback STORE AS res_nt ;
CTX_FEEDBACK_TYPE はCTXSYS
スキーマのシステム定義型です。
関連項目:
HFEEDBACK
表の構造の詳細は、「Oracle Text結果表」の「HFEEDBACK表」を参照してください。
CTX_QUERY.HFEEDBACKのコール
次のコードは、computer industryの問合せを持つHFEEDBACK
プロシージャをコールします。
BEGIN ctx_query.hfeedback (index_name => 'my_index', text_query => 'computer industry', feedback_table => 'restab', sharelevel => 0, feedback_id => 'query10' ); END;
結果表からの選択
次のコードは、結果表からフィードバック・データを取り出します。上位語、下位語および関連語フィードバックがNESTED TABLEから個別に取り出されます。
DECLARE i NUMBER; BEGIN FOR frec IN ( SELECT object_name, bt_feedback, rt_feedback, nt_feedback FROM restab WHERE feedback_id = 'query10' AND object_name IS NOT NULL ) LOOP dbms_output.put_line('Broader term feedback for ' || frec.object_name || ':'); i := frec.bt_feedback.FIRST; WHILE i IS NOT NULL LOOP dbms_output.put_line(frec.bt_feedback(i).text); i := frec.bt_feedback.NEXT(i); END LOOP; dbms_output.put_line('Related term feedback for ' || frec.object_name || ':'); i := frec.rt_feedback.FIRST; WHILE i IS NOT NULL LOOP dbms_output.put_line(frec.rt_feedback(i).text); i := frec.rt_feedback.NEXT(i); END LOOP; dbms_output.put_line('Narrower term feedback for ' || frec.object_name || ':'); i := frec.nt_feedback.FIRST; WHILE i IS NOT NULL LOOP dbms_output.put_line(frec.nt_feedback(i).text); i := frec.nt_feedback.NEXT(i); END LOOP; END LOOP; END;
出力例
次の出力は、computer industryについて問い合せる前述の例に対するものです。
Broader term feedback for computer industry: hard sciences Related term feedback for computer industry: computer networking electronics knowledge library science mathematics optical technology robotics satellite technology semiconductors and superconductors symbolic logic telecommunications industry Narrower term feedback for computer industry: AT&T Starlans ATI Technologies, Incorporated ActivCard Actrade International Ltd. Alta Technology Amiga Format Amiga Library Services Amiga Shopper Amstrat Action Apple Computer, Incorporated ..
ノート:
取得したHFEEDBACK
情報は、索引およびナレッジ・ベースの内容に依存するため、示したサンプルの内容とは異なる可能性があります。
制限事項
CTX_QUERY.HFEEDBACK
では、問合せテンプレートおよびローリング・アップグレードの使用はサポートされていません。
12.5 REMOVE_SQE
CTX_QUERY.REMOVE_SQE
プロシージャは、指定したストアド・クエリー式を削除します。
CTX_QUERY.REMOVE_SQE
を使用すると、セッション期間SQEと永続SQEの両方を削除できます。「STORE_SQE」を参照してください。
query_name
ネームスペースは永続SQEとセッション期間SQEの間で共有されるため、削除するSQEの期間を指定する必要はありません。
例
begin ctx_query.remove_sqe('dis1'); ctx_query.remove_sqe('dis2'); end; /
12.6 RESULT_SET
このプロシージャは、XML問合せを実行してXMLの結果セットを生成します。
構文
CTX_QUERY.RESULT_SET (
index_name IN VARCHAR2,
query IN VARCHAR2,
result_set_descriptor IN CLOB,
result_set IN OUT NOCOPY CLOB,
part_name IN VARCHAR2 DEFAULT NULL
);
- index_name
-
問合せを実行する索引を指定します。
- query
-
問合せ文字列を指定します。
- result_set_descriptor
-
XMLの結果セット記述子を指定します。結果セットに含む内容を示します。
- result_set
-
出力結果セットを指定します。この変数に
NULL
を入力すると、セッション中に一時LOBが割り当てられてユーザーに戻ります。ユーザーは、この一時LOBの割当て解除の責任があります。 - part_name
-
索引パーティション名を指定します。グローバル索引の場合、
part_name
をNULL
にする必要があります。パーティション索引でpart_name
がNULL
ではない場合、指定されたパーティションにのみ、問合せが評価されます。パーティション索引でpart_name
がNULL
の場合、すべてのパーティションで問合せが評価されます。
入力結果セット記述子
結果セット記述子は、結果セットの計算対象を示すXMLメッセージです。結果セット記述子の要素とその出現順序は、出力結果セットの内容を指定する簡単なテンプレートとして使用できます。つまり、ヒットしたROWIDのリスト、カウント、トークン数などを指定します。要素の属性には、ROWIDリストのヒット数や予測カウントおよび実測カウントなど、特定の操作のパラメータおよびオプションを指定します。
結果セット記述子自体は、次のDTDに準拠したXMLです。
<!DOCTYPE ctx_result_set_descriptor [
<!ELEMENT ctx_result_set_descriptor (hitlist?, group*, count?, collocates?)>
<!ELEMENT hitlist (rowid?, score?, sdata*, snippet*, sentiment?)>
<!ELEMENT group (count?, group_values?)>
<!ELEMENT count EMPTY>
<!ELEMENT rowid EMPTY>
<!ELEMENT score EMPTY>
<!ELEMENT sdata EMPTY>
<!ELEMENT group_values (value*)>
<!ELEMENT value EMPTY>
<!ELEMENT sentiment (item*)>
<!ELEMENT item EMPTY>
<!ELEMENT collocates EMPTY>
<!ATTLIST sentiment classifier CDATA "DEFAULT_CLASSIFIER">
<!ATTLIST item topic CDATA #REQUIRED>
<!ATTLIST item type (about|exact) "exact">
<!ATTLIST item agg (TRUE|FALSE) "FALSE">
<!ATTLIST item radius CDATA "50">
<!ATTLIST item max_inst CDATA "5">
<!ATTLIST item starttag CDATA #IMPLIED>
<!ATTLIST item endtag CDATA #IMPLIED>
<!ATTLIST collocates radius CDATA "20">
<!ATTLIST collocates max_words CDATA "10">
<!ATTLIST collocates use_tscore (TRUE|FALSE) "TRUE">
<!ATTLIST collocates use_hits CDATA "10">
<!ATTLIST group sdata CDATA #REQUIRED>
<!ATTLIST group topn CDATA #IMPLIED>
<!ATTLIST group bucketby CDATA #IMPLIED>
<!ATTLIST group sortby CDATA #IMPLIED>
<!ATTLIST group order CDATA #IMPLIED>
<!ATTLIST value id CDATA #IMPLIED>
<!ATTLIST hitlist start_hit_num CDATA #REQUIRED>
<!ATTLIST hitlist end_hit_num CDATA #REQUIRED>
<!ATTLIST hitlist order CDATA #IMPLIED>
<!ATTLIST count exact (TRUE|FALSE) "FALSE">
<!ATTLIST sdata name CDATA #REQUIRED>
<!ATTLIST snippet radius CDATA #IMPLIED>
<!ATTLIST snippet max_length CDATA #IMPLIED>
<!ATTLIST snippet starttag CDATA #IMPLIED>
<!ATTLIST snippet endtag CDATA #IMPLIED>
]>
結果セット記述子に有効なXML要素は、次のとおりです。
-
ctx_result_set_descriptor
これは、結果セット記述子のルート要素です。親要素と使用できる属性はありません。
有効な子要素は、次のとおりです。
-
0(ゼロ)個以上の
hitlist
要素。 -
0(ゼロ)個以上の
group
要素。 -
1つの
count
要素。
-
-
group
group
要素は、生成された結果セットをグループに分類します。つまり、SDATA
セクションの値を使用して、結果を分類します。ファセット・ナビゲーションをサポートする場合は、ファセット数を取得するためにgroup要素も使用します。親要素はctx_result_set_descriptor
です。使用できる属性は、次のとおりです。-
sdata
グループ化に使用する
SDATA
セクションの名前を指定します。これは必須です。 -
bucketby
カウントの際にグループ値をバケット化する方法を決定します。このリリースの時点で、サポートされる有効な属性値はsingleです。一意の各ファセット値と、そのファセット数が表示されます。
-
topn
返されるファセット値の最大数を制限します。デフォルトでは、降順のグループ数でソートされます。有効な属性値は、ゼロより大きい正の整数です。
-
sortby
有効な属性値は、valueとcountです。valueは、その値自体を使用して、それぞれのデータ型に応じてソートされます。count (デフォルト)は、グループごとのカウント数を使用してソートされます。
-
order
順序は、昇順または降順にできます。
group
の有効な子要素は、次のとおりです。-
1つの
count
要素。
-
-
hitlist
hitlist
要素は、ヒットしたドキュメントのリストの包含を制御します。親要素はctx_result_set_descriptor
です。使用できる属性は、次のとおりです。hitlist
で使用できる属性要素は、次のとおりです。-
start_hit_num
生成された結果セットに含める最初にヒットしたドキュメントを指定します。16000以下の正の整数を設定できます。たとえば、
start_hit_num
が21の場合、21番目にヒットしたドキュメントから結果セットにヒットしたドキュメントが格納されます。この要素は必須です。 -
end_hit_num
生成された結果セットに含める最後にヒットしたドキュメントを指定します。48000以下の正の整数を設定できます。たとえば、
end_hit_num
が40の場合、40番目にヒットしたドキュメントまで結果セットにヒットしたドキュメントが格納されます。この要素は必須です。 -
order
生成された結果セットにドキュメントの順序を指定するオプション属性です。値は、SQL
ORDER
BY
文と類似するリストです。ただし、列名のかわりにSCORE
またはSDATA
セクション名を使用できます。次の例では、MYDATE
とMYPRICE
がSDATA
セクション名です。(order = "SCORE DESC, MYDATE, MYPRICE DESC")
hitlist
で使用できる子要素は、次のとおりです。 -
1つの
rowid
要素。 -
1つの
score
要素。 -
1つ以上の
sdata
要素。 -
1つの
snippet
要素。
-
-
count
生成された結果セットにヒットしたドキュメントの数を格納します。親要素は、次のとおりです。
-
ctx_result_set_descriptor
-
group
count
で使用できる属性は、次のとおりです。-
exact
予測モードに使用します。
true
またはfalse
に設定します。これは必須です。デフォルトは、false
です。
count
の有効な子要素はありません。 -
-
rowid
生成された結果セットにヒットごとのROWID情報を格納します。親要素は、
hitlist
です。属性および有効な子要素はありません。 -
score
生成された結果セットにヒットごとのスコア情報を格納します。
-
親要素は、
hitlist
です。 -
使用できる属性および有効な子要素はありません。
-
-
sdata
生成された結果セットにヒットごとの
sdata
値を格納します。-
親要素は、
hitlist
です。 -
使用できる属性は
name
です。sdata
セクションの名前を指定します。これは必須です。 -
子要素はありません。
-
-
sentiment
この要素は、
hitlist
の部分として戻される各ドキュメントに対するセンチメント分類結果の包含を制御します。hitlist
要素内のセンチメント要素は、1つのみです。親要素は、
hitlist
です。この要素で使用可能な属性は、
classifier
です。これは、センチメント分析の実行で使用するセンチメント分類子を指定します。分類子が指定されない場合、CTXSYS.DEFAULT_SENTIMENT_CLASSIFIER
を使用します。指定した分類子が使用できない場合、エラーが表示されます。 -
item
この要素は、戻されたドキュメントのセットにセンチメント情報をフェッチする必要があるキーワードまたは概念を指定します。各
sentiment
要素には、少なくとも1つの子item
要素を含める必要があります。子item
要素の最大数は、10です。空のitem
要素を指定する(属性を指定しない)と、ドキュメント全体のセンチメント・スコアが戻されます。親要素は、
sentiment
です。item
で使用できる属性は、次のとおりです。-
topic
これは、センチメント分析が実行されるトピックを指定します。
-
type
この属性が
ABOUT
に設定されると、分類子は、指定されたトピックをキーワードではなく概念として処理します。デフォルトはEXACT
です。 -
agg
センチメント・スコアを集計し、ドキュメント全体に対する単一スコアとして提示するか、決定します。値は、TRUEまたはFALSEのいずれかです。TRUEを指定すると、テキスト・セグメントごとのスコアが集計され、テキスト・セグメントは出力結果には戻されず、集計スコアのみが戻されます。デフォルト値は、FALSEです。
-
radius
キーワードのセンチメント分類中に識別するテキストの周囲の半径を指定します。デフォルト値は50です。
-
max_inst
センチメント分類で分析する、指定されたトピックに関連するテキスト抜粋のインスタンスの数を指定します。デフォルト値は5です。
-
starttag
トピックのハイライトを開始するタグを指定します。
-
endtag
トピックのハイライトを終了するタグを指定します。
-
-
コロケート
この要素は、問合せで取得された一連のドキュメントに関連するキーワードまたは概念の生成を制御します。
親要素は、
ctx_result_set_descriptor
です。collocates
で使用できる属性は、次のとおりです。-
radius
コロケートで識別するテキストの周囲の半径を指定します。デフォルト値は20です。
-
max_words
指定された問合せで返されるコロケートの最大数を指定します。デフォルト値は10です。
-
use_tscore
コロケートのスコアリングでTスコアを使用するかどうか、指定します。値は、TRUEまたはFALSEのいずれかで、デフォルトはTRUEです。
この属性をTRUEに設定すると、共通トークンのコロケートを識別できます。この属性をFALSEに設定すると、一意の語を強調するコロケートを識別できます。
-
出力結果セットXML
出力結果セットXMLは、次のDTDに準拠したXMLです。
<!DOCTYPE ctx_result_set [ <!ELEMENT ctx_result_set (hitlist?, groups*, count? , collocates?)> <!ELEMENT hitlist (hit*)> <!ELEMENT hit (rowid?, score?, snippet*, sdata*, sentiment?)> <!ELEMENT groups (group*)> <!ELEMENT group (count?)> <!ELEMENT count (#PCDATA)> <!ELEMENT rowid (#PCDATA)> <!ELEMENT score (#PCDATA)> <!ELEMENT snippet (segment*)> <!ELEMENT sdata (#PCDATA)> <!ELEMENT sentiment (item*)> <!ELEMENT item (segment*, score*, doc?)> <!ELEMENT segment (segment_text?, segment_score?)> <!ELEMENT segment_text (#PCDATA)> <!ELEMENT segment_score (#PCDATA)> <!ELEMENT doc (score?)> <!ELEMENT collocates (collocation*)> <!ELEMENT collocation (word?, score?)> <!ELEMENT word (#PCDATA)> <!ATTLIST item topic CDATA #REQUIRED> <!ATTLIST groups sdata CDATA #REQUIRED> <!ATTLIST group value CDATA #REQUIRED> <!ATTLIST group range CDATA #IMPLIED> <!ATTLIST group single CDATA #IMPLIED> <!ATTLIST sdata name CDATA #REQUIRED>
出力結果セットに有効なXML要素のリストは、次のとおりです。
-
ctx_result_set
生成された結果セットのルート要素です。属性はありません。親要素はありません。有効な子要素は、次のとおりです。
-
1つの
hitlist
要素。 -
0(ゼロ)個以上の
groups
要素。
-
-
groups
グループ分類セクションの開始を区切ります。親要素は、
ctx_result_set
です。使用できる属性は、次のとおりです。-
sdata
グループ化に使用する
sdata
セクションの名前です。
有効な子要素は、次のとおりです。
-
0(ゼロ)個以上の
group
要素。
-
-
group
GROUP
BY
の値の開始を区切ります。親要素は、groups
要素です。使用できる属性は、次のとおりです。-
value
sdata
セクションの値です。
有効な子要素は、1つの
count
要素です。 -
-
hitlist
hitlist
情報の開始を区切ります。親要素はctx_result_set
です。子は0個以上のhit
要素です。属性はありません。 -
hit
hitlist
内の特定のドキュメントの情報の開始を区切ります。親要素はhitlist
です。使用できる属性はありません。有効な子要素は、次のとおりです。-
0(ゼロ)個または1個の
rowid
要素。 -
0(ゼロ)個または1個の
score
要素。 -
0(ゼロ)個または1個の
sdata
要素。 -
ゼロまたは1つの
snippet
要素。
-
-
rowid
ドキュメントのROWIDです。ドキュメントのROWIDが格納されます。親要素は、
hit
要素です。子要素および使用できる属性はありません。 -
score
ドキュメントのスコアです。親要素は、hit要素です。数値のスコアが格納されます。使用できる属性および有効な子要素はありません。
-
sdata
ドキュメントの
SDATA
の値です。親要素は、hit
要素です。使用できる属性は、sdata
セクション名のname
です。有効な子要素はありません。SDATA
セクション値が格納されます。DATE
の値は「YYYY-MM-DD HH24:MI:SS」形式で、格納される実際の値によって異なります。 -
count
ドキュメントのヒット数です。親要素は、
ctx_result_set
要素またはgroup
要素です。数値のヒット数が格納されます。属性および有効な子要素はありません。 -
sentiment
hitlist
ドキュメントのセンチメント要素を区切ります。子要素はitem
で、親はhitlist
です。出力結果セットに属性は含まれません。 -
item
hitlist
ドキュメントのitem
要素を区切ります。親要素はsentiment
で、子要素はsegment
、score
およびdoc
です。topic
という属性を1つ持ちます。 -
segment
ヒント内のセグメント要素のインスタンスを区切ります。親要素は
item
です。子要素はsegment_text
およびsegment_score
です。属性は含まれません。 -
segment_text
指定されたアイテム・トピックに対してテキスト・セグメントを指定します。親要素は
segment
です。子要素も属性もありません。 -
segment_score
セグメントに対するセンチメント・スコアを指定します。親要素はsegmentです。子要素も属性もありません。
-
score
ドキュメントまたは親アイテム・トピックに対するセンチメント・スコアを指定します。コロケーション内に存在する場合、特定のコロケーション・キーワードに対するコロケーション・スコアを指定します。親要素はdocまたはcollocationです。子要素も属性もありません
-
doc
ドキュメント全体のセンチメント・スコアであることを示します。親要素は
item
で、子要素はscore
です。DIRECT_DATASTOREに属性はありません。 -
コロケート
結果セットの出力のコロケート要素を区切ります。親要素は
ctx_result_set
で、子要素はcollocation
です。DIRECT_DATASTOREに属性はありません。 -
collocation
単一コロケーションを示します。親要素は
collocates
で、子要素はword
およびscore
です。DIRECT_DATASTOREに属性はありません。 -
word
コロケート・トークンを指定します。親要素は
collocation
です。子要素も属性もありません。
例
XMLのresult_set_descriptor
を指定したCTX_QUERY.RESULT_SET
のこのコールは、XML形式で次の情報を生成します。
-
pubDate
SDATA
セクション値のDESC
およびスコアのDESC
で順序付けられた、スコア、ROWID、authorSDATA
セクション値、およびpubDateSDATA
セクション値を表示する上位5個のヒット -
テキスト問合せのドキュメントの総ヒット数
-
pubDate
SDATA
セクション値でグループ化した数 -
author
SDATA
セクション値でグループ化した数
declare rs clob; begin dbms_lob.createtemporary(rs, true, dbms_lob.session); ctx_query.result_set('docidx', 'oracle', ' <ctx_result_set_descriptor> <count/> <hitlist start_hit_num="1" end_hit_num="5" order="pubDate desc, score desc"> <score/> <rowid/> <sdata name="author"/> <sdata name="pubDate"/> </hitlist> <group sdata="pubDate"> <count/> </group> <group sdata="author"> <count/> </group> </ctx_result_set_descriptor> ', rs); dbms_lob.freetemporary(rs); exception when others then dbms_lob.freetemporary(rs); raise; end; /
結果セットの出力CLOBのXML出力ストアは、次のようになります。
<ctx_result_set> <hitlist> <hit> <score>3</score><rowid>AAAPoEAABAAAMWsAAC</rowid> <sdata name="AUTHOR">John</sdata> <sdata name="PUBDATE">2001-01-03 00:00:00</sdata> </hit> <hit> <score>3</score><rowid>AAAPoEAABAAAMWsAAG</rowid> <sdata name="AUTHOR">John</sdata> <sdata name="PUBDATE">2001-01-03 00:00:00</sdata> </hit> <hit> <score>3</score><rowid>AAAPoEAABAAAMWsAAK</rowid> <sdata name="AUTHOR">John</sdata> <sdata name="PUBDATE">2001-01-03 00:00:00</sdata> </hit> <hit> <score>3</score><rowid>AAAPoEAABAAAMWsAAO</rowid> <sdata name="AUTHOR">John</sdata> <sdata name="PUBDATE">2001-01-03 00:00:00</sdata> </hit> <hit> <score>3</score><rowid>AAAPoEAABAAAMWsAAS</rowid> <sdata name="AUTHOR">John</sdata> <sdata name="PUBDATE">2001-01-03 00:00:00</sdata> </hit> </hitlist> <count>100</count> <groups sdata="PUBDATE"> <group value="2001-01-01 00:00:00"><count>25</count></group> <group value="2001-01-02 00:00:00"><count>50</count></group> <group value="2001-01-03 00:00:00"><count>25</count></group> </groups> <groups sdata="AUTHOR"> <group value="John"><count>50</count></group> <group value="Mike"><count>25</count></group> <group value="Steve"><count>25</count></group> </groups> </ctx_result_set>
制約と制限事項
RESULT_SET
には、次の制約と制限事項が適用されます。
-
結果セット・インタフェース(RSI)は仮想プライベート・データベースではサポートされません。(VPDは通常の
CONTAINS
問合せでサポートされますがRSIではサポートされません。) -
ファンクションを実行するには、元表を問い合せることができる必要があります。
-
元表でVPDポリシーが有効な場合、結果セットのドキュメント位置に資格のないドキュメントは表示されません。
-
VPDポリシーを使用している場合、カウントなどの集計メソッドが正確でないことがあります。
関連項目
XML結果セット・インタフェースの詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。
ファセット・ナビゲーションの詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。
12.7 RESULT_SET_CLOB_QUERY
このプロシージャは、XML問合せを実行して、XMLにCLOB
問合せパラメータに基づいた結果セットを生成します。
構文
RESULT_SET_CLOB_QUERY
プロシージャは、RESULT_SET
プロシージャと同一です。ただし、長い問い合わせを処理する場合、問合せパラメータのデータ型は、VARCHAR2
ではなくCLOB
です。
CTX_QUERY.RESULT_SET_CLOB_QUERY (
index_name IN VARCHAR2,
query IN CLOB,
result_set_descriptor IN CLOB,
result_set IN OUT CLOB,
part_name IN VARCHAR2 DEFAULT
);
関連項目:
これらのパラメータの詳細は、RESULT_SETを参照してください12.8 RESULT_SET_DOCUMENT
CONTAINS
問合せのカーソルを明示的にクローズした後で、問合せテンプレートに<ctx_result_set_descriptor>要素がある場合に、RESULT_SET_DOCUMENT
は結果セット・ドキュメントを保持します。
構文
CTX_QUERY.RESULT_SET_DOCUMENT( index_name IN VARCHAR2, query IN VARCHAR2, result_set_descriptor IN CLOB, result_set IN OUT NOCOPY CLOB, part_name IN VARCHAR2 DEFAULT NULL );
- index_name
-
問合せを実行する索引を指定します。
- query
-
問合せ文字列を指定します。
- result_set_descriptor
-
XMLの結果セット記述子を指定します。結果セットに含む内容を示します。詳細は、「入力結果セット識別子」を参照してください。
- result_set
-
出力結果セットを指定します。この変数に
NULL
を入力すると、セッション中に一時LOBが割り当てられてユーザーに戻ります。ユーザーは、この一時LOBの割当て解除の責任があります。詳細は、「出力結果セットXML」を参照してください。 - part_name
-
索引パーティション名を指定します。グローバル索引の場合、
part_name
をNULL
にする必要があります。パーティション索引でpart_name
がNULL
ではない場合、指定されたパーティションにのみ、問合せが評価されます。パーティション索引でpart_name
がNULL
の場合、すべてのパーティションで問合せが評価されます。
12.9 STORE_SQE
このプロシージャは、ストアド・クエリーまたはセッション期間問合せの式(SQE)を作成します。問合せ定義のみが格納されます。
SQEは、結果を格納せずに問合せの定義を格納するときに使用します。CONTAINS
のSQL演算子によって、その問合せの定義を参照します。このように、SQEを使用すると、長い問合せ式や使用頻度の高い問合せ式を簡単に定義できます。セッション期間SQEを作成すると、不要または使用しないSQEを削除するメンテナンス・オーバーヘッドを回避する場合に便利です。
サポートされる演算子
ストアド・クエリー式は、すべてのCONTAINS
問合せ演算子をサポートしています。また、すべての特殊文字、および他のストアド・クエリー式も含めて、問合せ式で使用できるすべてのコンポーネントをサポートしています。
権限
ユーザーは、所有しているストアド・クエリー式を作成および削除できます。ユーザーは、誰が所有するストアド・クエリー式でも使用できます。CTXSYS
ユーザーは、どのユーザーのストアド・クエリー式も作成および削除できます。
構文
構文1
CTX_QUERY.STORE_SQE( query_name IN VARCHAR2, text_query IN VARCHAR2, duration IN NUMBER default CTX_QUERY.DURATION_PERSISTENT );
構文2
CTX_QUERY.STORE_SQE_CLOB_SYNTAX( query_name IN VARCHAR2, text_query IN CLOB, duration IN NUMBER default CTX_QUERY.DURATION_PERSISTENT );
- query_name
-
作成するストアド・クエリー式の名前を指定します。
- text_query
-
query_name
に関連付ける問合せ式を指定します。 - duration
-
可能な値は
DURATION_SESSION
とDURATION_PERSISTENT
です。-
duration
をDURATION_SESSION
に設定すると、ストアド・クエリー式はPL/SQLパッケージ変数に格納され、セッションに使用できます。 -
duration
がDURATION_PERSISTENT
に設定されると、ストアド・クエリー式はデータベース表に格納され、他のデータベース・セッションで参照できます。 -
シャードされたデータベースのカタログから発行された場合、
DURATION_SESSION
オプションを指定したSQEはサポートされません。かわりにDURATION_PERSISTENT
オプションを使用してください。 -
query_name
ネームスペースは、永続SQEとセッション期間SQEの間で共有されます。他の永続SQEまたはセッション期間SQEによってすでに使用されている名前で永続SQEまたはセッション期間SQEを追加しようとすると、エラーが発生します。
-
- duration_persistent
-
CLOB問合せがある場合は、期間をデータベース表に格納するように指定します。このSQEは、不要になった時点で削除されます。
-
query_name
ネームスペースは、永続SQEとセッション期間SQEの間で共有されます。他の永続SQEまたはセッション期間SQEによってすでに使用されている名前で永続SQEまたはセッション期間SQEを追加しようとすると、エラーが発生します。
-
例
begin ctx_query.store_sqe('dis1', 'flood', CTX_QUERY.DURATION_SESSION); ctx_query.store_sqe('dis2', 'tornado', CTX_QUERY.DURATION_PERSISTENT); ctx_query.store_sqe('dis3', 'fire') end; /