2 Oracle Textの使用の開始
この章の内容は次のとおりです。
2.1 Oracle Textの使用の開始の概要
この章では、Oracle Text開発者ユーザー・アカウントの作成方法、および単純なテキスト問合せアプリケーションとカタログ・アプリケーションの作成方法の基本情報を提供します。また、各アプリケーション・タイプで表のロード、索引付けおよび問合せに使用する基本的なSQL文の情報も提供します。
詳細なアプリケーションの例は、「付録」に記載されています。
注意:
この章では、読みやすさと、テキストの切取りおよび貼付けの便宜のために、SQL>
プロンプトを省略しています。
関連項目:
ドキュメント分類アプリケーションの概要の構築の詳細は、「Oracle Textでのドキュメントの分類」を参照
2.3 問合せアプリケーションのクイック・ツアー
基本的なテキスト問合せアプリケーションでは、ユーザーが問合せワードまたは句を入力すると、アプリケーションは、問合せに最も一致するドキュメントのリストを戻します。このようなアプリケーションでは、CONTEXT
索引が作成され、CONTAINS
を使用してこの索引の問合せが行われます。
通常は、問合せアプリケーションにはユーザー・インタフェースが必要です。CONTEXT
索引タイプを使用してこのような問合せアプリケーションを作成する方法の例は、「CONTEXT問合せアプリケーション」を参照してください。
ここに示された例では、テキスト表へのロード、ドキュメントの索引付けおよび索引の問合せのための基本SQL文を提供します。
2.3.2 SQL*Loaderを使用した表へのロード
次の手順を実行して、SQL*Loaderで表へのロードをバッチで実行することもできます。
関連項目:
SQL*Loaderを使用したデータ・ファイルからテキスト表へのロード方法の例は、「PSP Webアプリケーションの作成」を参照してください
2.3.2.1 手順1 CONTEXT索引の作成
HTMLファイルを索引付けするには、次のようにCONTEXT
索引をテキスト列に作成します。HTMLの索引付けであるため、この例では、フィルタ処理が不要なNULL_FILTER
プリファレンス型とHTML_SECTION_GROUP
型を使用します。
CREATE INDEX idx_docs ON docs(text) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('FILTER CTXSYS.NULL_FILTER SECTION GROUP CTXSYS.HTML_SECTION_GROUP');
索引付け時にHTMLドキュメントをフィルタ処理する必要がないため、NULL_FILTER
を使用します。ただし、PDF、Microsoft Wordまたはその他の書式設定されたドキュメントを索引付けする場合は、FILTER
プリファレンスとしてCTXSYS.AUTO_FILTER
(デフォルト)を使用します。
この例では、HTMLドキュメントの索引付けに推奨されているHTML_SECTION_GROUP
セクション・グループも使用します。HTML_SECTION_GROUP
を使用すると、特定のHTMLタグ内を検索して、フォント情報などの不要なマークアップを索引から削除できます。
2.3.2.2 手順2 CONTAINSによる表の問合せ
まず、読みやすいように、SELECT
文の出力書式を設定します。text
列の幅を40文字にします。
COLUMN text FORMAT a40;
SELECT
文でCONTAINS
を使用して表を問い合せます。これにより、問合せを満たすドキュメントIDが取得されます。次の問合せは、ワードFranceを含むドキュメントをすべて検索します。
SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'France', 1) > 0; SCORE(1) ID TEXT ---------- ---------- ---------------------------------------- 4 3 <HTML>France is in Europe.</HTML> 4 2 <HTML>Paris is a city in France.</HTML>
2.3.2.3 手順3 ドキュメントの表示
実際のアプリケーションでは、問合せの語句がハイライト表示された状態で、選択したドキュメントをユーザーに表示することがあります。Oracle Textを使用すると、CTX_DOC
パッケージによってドキュメントをマークアップできます。
SQL*Plusの無名PL/SQLブロックを使用して、HTMLドキュメントのマークアップを表示できます。ただし、実際のアプリケーションでは、ドキュメントをブラウザで表示することがあります。
このPL/SQLの例では、CTX_DOC.MARKUP
のインメモリー・バージョンを使用して、ドキュメント3のワードFranceをハイライト表示します。マークアップ・テキストを格納するために一時CLOB
(キャラクタ・ラージ・オブジェクト・データ型)が割り当てられ、標準出力に戻されます。終了前に、CLOB
の割当てが解除されます。
SET SERVEROUTPUT ON; DECLARE 2 mklob CLOB; 3 amt NUMBER := 40; 4 line VARCHAR2(80); 5 BEGIN 6 CTX_DOC.MARKUP('idx_docs','3','France', mklob); 7 DBMS_LOB.READ(mklob, amt, 1, line); 8 DBMS_OUTPUT.PUT_LINE('FIRST 40 CHARS ARE:'||line); 9 DBMS_LOB.FREETEMPORARY(mklob); 10 END; 11 / FIRST 40 CHARS ARE:<HTML><<<France>>> is in Europe.</HTML> PL/SQL procedure successfully completed.
2.3.2.4 手順4 データ操作後の索引の同期化
CONTEXT
索引を作成する場合、索引を明示的に同期化して、テキスト表に対する挿入、更新または削除にあわせて索引を最新の状態にしておく必要があります。
Oracle Textでは、CTX_DDL.SYNC_INDEX
プロシージャを使用して索引を同期化できます。
docs
表に行を追加します。
INSERT INTO docs VALUES(4, '<HTML>Los Angeles is a city in California.</HTML>'); INSERT INTO docs VALUES(5, '<HTML>Mexico City is big.</HTML>');
索引は同期化されていないため、これらの新しい行は、cityを問い合せても戻りません。
SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'city', 1) > 0; SCORE(1) ID TEXT ---------- ---------- -------------------------------------------------- 4 2 <HTML>Paris is a city in France.</HTML>
したがって、2MBのメモリーを使用して索引を同期化し、問合せを再実行します。
EXEC CTX_DDL.SYNC_INDEX('idx_docs', '2M'); PL/SQL procedure successfully completed. COLUMN text FORMAT a50; SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'city', 1) > 0; SCORE(1) ID TEXT ---------- ---------- -------------------------------------------------- 4 5 <HTML>Mexico City is big.</HTML> 4 4 <HTML>Los Angeles is a city in California.</HTML> 4 2 <HTML>Paris is a city in France.</HTML>
2.4 カタログ・アプリケーションのクイック・ツアー
ここに示された例では、カメラやCDプレーヤなどの電子機器を販売するオークション・サイトのカタログ索引を作成するための基本SQL文を提供します。毎日新しい在庫が追加され、品目の説明、入札日および価格をまとめて格納する必要があります。
アプリケーションは、複合問合せに対して適切な時間で応答する必要があります。適切なCTXCAT
索引を作成するには、ユーザーが頻繁に検索する列を決定することが重要です。このタイプの索引の問合せは、CATSEARCH
演算子を使用して入力されます。
注意:
通常は、問合せアプリケーションにはユーザー・インタフェースが必要です。CATSEARCH
索引タイプを使用してこのような問合せアプリケーションを作成する方法の例は、「CATSEARCH問合せアプリケーション」を参照してください。
2.4.2 SQL*Loaderを使用した表へのロード
ここに示された手順を実行して、SQL*Loaderで表へのロードをバッチで実行することもできます。
関連項目:
SQL*Loaderを使用したデータ・ファイルからテキスト表へのロード方法の例は、「PSP Webアプリケーションの作成」を参照してください
2.4.2.1 手順1 問合せの判断
検索される可能性のある基準を判断します。この例では、すべての問合せが品目の説明のタイトル列を検索し、ほとんどの問合せが価格順になっているかどうかを判断します。後でCATSEARCH
演算子を使用するときに、テキスト列の語句および構造化句の基準を指定します。
2.4.2.3 手順3 CTXCAT索引の作成
結合されたカタログ索引は、CREATE
INDEX
を使用して、次のようにAUCTION
表に作成します。
CREATE INDEX auction_titlex ON AUCTION(title) INDEXTYPE IS CTXSYS.CTXCAT PARAMETERS ('index set auction_iset');
図2-1に、CTXCAT
索引およびサブ索引と列の関係を示します。
2.4.2.4 手順4 CATSEARCHによる表の問合せ
AUCTION
表にCTXCAT
索引を作成すると、CATSEARCH
演算子を使用してこの索引を問い合せることができます。
出力を読取り可能にするために、まず出力書式を設定します。
COLUMN title FORMAT a40;
問合せを実行します。
SELECT title, price FROM auction WHERE CATSEARCH(title, 'CAMERA', 'order by price')> 0; TITLE PRICE --------------- ---------- PENTAX CAMERA 200 CANON CAMERA 250 OLYMPUS CAMERA 300 NIKON CAMERA 400 SELECT title, price FROM auction WHERE CATSEARCH(title, 'CAMERA', 'price <= 300')>0; TITLE PRICE --------------- ---------- PENTAX CAMERA 200 CANON CAMERA 250 OLYMPUS CAMERA 300
2.4.2.5 手順5 表の更新
新しい行を追加することで、カタログ表を更新します。カタログ表を更新すると、変更を反映するために、CTXCAT
索引が自動的に同期化されます。
たとえば、表に次の新しい行を追加して、問合せを再実行します。
INSERT INTO AUCTION VALUES(5, 'FUJI CAMERA', 1, 350, '28-OCT-2002'); INSERT INTO AUCTION VALUES(6, 'SONY CAMERA', 1, 310, '28-OCT-2002'); SELECT title, price FROM auction WHERE CATSEARCH(title, 'CAMERA', 'order by price')> 0; TITLE PRICE ----------------------------------- ---------- PENTAX CAMERA 200 CANON CAMERA 250 OLYMPUS CAMERA 300 SONY CAMERA 310 FUJI CAMERA 350 NIKON CAMERA 400 6 rows selected.
追加された行が、問合せにただちに表示されます。
2.5 分類アプリケーションのクイック・ツアー
分類アプリケーションでは、ドキュメントの内容に基づいてアクションが実行されます。アクションには、ドキュメントへのカテゴリIDの割当てや、ユーザーへのドキュメントの送信などがあります。その結果、ドキュメントが分類されます。
ここでは、次の項目について説明します。
2.5.1 ドキュメントの分類について
ドキュメントは、事前に定義されたルールに従って分類されます。これらのルールは、カテゴリに対して選択されます。たとえば、'presidential elections'という問合せルールは、政治に関するカテゴリに対してドキュメントを選択します。
Oracle Textでは、複数のタイプの分類を提供しています。ここで説明する単純な分類、つまりルールベースの分類では、ドキュメント・カテゴリおよびドキュメントを分類するためのルールを作成します。管理型分類では、提供されたトレーニング・ドキュメントのセットからルールが導出されます。クラスタ化では、Oracle Textによりルールおよびカテゴリが導出され、すべての処理が自動的に実行されます。
関連項目:
分類の詳細は、「ドキュメント分類の概要」を参照してください
Oracle Textを使用してドキュメントの内容を簡単に分類するには、ルールを作成します。ルールとは基本的に、ドキュメントの内容をカテゴリ化する問合せの表です。CTXRULE
索引でこれらのルールを索引付けします。テキストの着信ストリームを分類するには、SELECT
文のWHERE
句でMATCHES
演算子を使用します。分類アプリケーションの一般的なフローは、図2-2を参照してください。