1 Oracle Textのアプリケーション開発の概要

Oracle Textを使用すると、テキスト問合せアプリケーションおよびドキュメント分類アプリケーションを作成できます。

この章では、以下のトピックについて説明します。

1.1 Oracle Textの概要

Oracle Textは、問合せアプリケーションおよびドキュメント分類アプリケーションのテキスト用の索引付け、語とテーマの検索および表示機能を提供します。

Oracle Textアプリケーションを設計するには、まず実行する問合せのタイプを決定します。問合せのタイプを決定することで、タスクに最も適した索引を選択できます。

Oracle Textは、次のカテゴリのアプリケーションに使用されます。

1.2 ドキュメント・コレクション・アプリケーション

テキスト問合せアプリケーションを使用すると、ユーザーは、Webサイト、デジタル・ライブラリ、ドキュメント・ウェアハウスなどのドキュメント・コレクションを検索できます。

この項では、次の項目について説明します。

1.2.1 ドキュメント・コレクション・アプリケーションについて

通常、コレクションは静的で、最初に索引付けを実行した後に内容が大幅に変更されることはありません。ドキュメントのサイズは任意であり、HTML、PDF、Microsoft Wordなどの多様な形式を使用できます。これらのドキュメントは、ドキュメント表に格納されます。検索を可能にするには、ドキュメント・コレクションを最初に索引付けします。

通常、問合せはワードまたは句で構成されます。アプリケーション・ユーザーは、ORANDなどの演算子を使用して、ワードおよび句の論理的な組合せを指定できます。ステミング、近接検索、ワイルド・カード操作など、その他の問合せ操作を使用すると、検索結果が改善されます。

このタイプのアプリケーションでは、無関係なドキュメントをできるかぎり取り出さないようにしながら、問合せに関連するドキュメントを取り出すことが重要です。最も関連のあるドキュメントが、結果リストの上位にランク付けされる必要があります。

このタイプのアプリケーションの問合せには、ドキュメント表に対するCONTEXT索引が最も適しています。この索引への問合せでは、アプリケーションは、SQL SELECT文のWHERE句でCONTAINS演算子を使用します。

図1-1 テキスト問合せアプリケーションの概要

図1-1の説明が続きます
「図1-1 テキスト問合せアプリケーションの概要」の説明

1.2.2 テキスト問合せアプリケーションのフローチャート

ドキュメント・コレクションに対する典型的なテキスト問合せアプリケーションでは、ユーザーが問合せを入力できるようになっています。アプリケーションはCONTAINS問合せを入力し、その問合せを満たすドキュメントのリスト(ヒットリスト)を戻します。問合せの結果は通常、関連性の度合によってランク付けされています。アプリケーションでは、ヒットリスト内の1つ以上のドキュメントを表示できます。

たとえば、アプリケーションでWeb上のURL (HTMLファイル)を索引付けすることにより、索引付けされた一連のURL内での問合せ機能が提供されます。この場合、問合せアプリケーションにより戻されるヒットリストは、ユーザーがアクセスできるURLで構成されます。

図1-2は、単純な問合せアプリケーションとユーザーとの対話方法をフローチャートで示しています。

  1. ユーザーが問合せを入力します。

  2. アプリケーションがCONTAINS問合せを実行します。

  3. アプリケーションがヒットリストを表示します。

  4. ユーザーがヒットリストからドキュメントを選択します。

  5. アプリケーションがドキュメントを表示します。

図1-2 問合せアプリケーションのフローチャート

図1-2の説明が続きます。
「図1-2 問合せアプリケーションのフローチャート」の説明

1.3 カタログ情報アプリケーション

カタログ情報は、オンライン書店やオークション・サイトなどの在庫タイプ情報で構成されます。

この項では、次の項目について説明します。

1.3.1 カタログ情報アプリケーションについて

格納されたカタログ情報は、本のタイトルなどのテキスト情報と、価格などの関連する構造化情報で構成されます。通常は、在庫に関してオンライン・カタログを最新の状態にしておくため、この情報は定期的に更新されます。

問合せは、通常、テキスト・コンポーネントと構造化コンポーネントとの組合せです。ほとんどの場合、問合せの結果は、日付や価格などの構造化コンポーネントでソートされます。このタイプの問合せアプリケーションでは、応答時間を短くすることが常に重要です。

カタログ・アプリケーションには、CTXCAT索引が最も適しています。SELECT文のWHERE句でCATSEARCH演算子を使用して、この索引を問い合せます。

図1-3に、catalog表とそのCTXCAT索引、およびCATSEARCH演算子を使用して索引を問い合せているカタログ・アプリケーションとの関係を示します。

図1-3 カタログ問合せアプリケーション

図1-3の説明が続きます
「図1-3 カタログ問合せアプリケーション」の説明

1.3.2 カタログ問合せアプリケーションのフローチャート

カタログ・アプリケーションを使用すると、ユーザーは、カタログ内の特定の品目を検索できます。たとえば、オンライン・ストア・アプリケーションを使用すると、ユーザーは、在庫内の品目を検索して購入できます。通常、ユーザー問合せは、テキスト記述を検索するテキスト・コンポーネントと、その他いくつかの順序付け基準(価格や日付など)で構成されます。

図1-4に、オンライン電子ストアにおける、カタログ問合せアプリケーションのフローチャートを示します。

  1. ユーザーが、テキスト・コンポーネント(cd playerなど)および構造化コンポーネント(order by priceなど)で構成される問合せを入力します。

  2. アプリケーションがCATSEARCH問合せを実行します。

  3. 適宜並べ替えられた結果が表示されます。

  4. ユーザーが結果をブラウズします。

  5. ユーザーが別の問合せを入力するか、品目の購入などのアクションを実行します。

図1-4 カタログ問合せアプリケーションのフローチャート

図1-4の説明が続きます
「図1-4 カタログ問合せアプリケーションのフローチャート」の説明

1.4 ドキュメント分類アプリケーション

ドキュメント分類アプリケーションでは、着信ストリームまたはドキュメントのセットを、事前定義されたルールのセットと比較します。ドキュメントが1つ以上のルールと一致した場合、アプリケーションはアクションを実行します。

たとえば、ニュース記事の着信ストリームがあるとします。この場合、「金融」のカテゴリを表すルールを定義できます。ルールとは、基本的に、「金融」を主題としたドキュメントを選択する、1つ以上の問合せです。たとえば、ルールは、'stocks or bonds or earnings'などの形式になります。

ウォール・ストリートの収益予測に関するドキュメントが到着し、このカテゴリのルールを満たしている場合、アプリケーションは、ドキュメントに「金融」のタグを付けたり、複数のユーザーに電子メールで送信するなどのアクションを実行します。

ドキュメント分類アプリケーションの作成には、ルールの表を作成してから、CTXRULE索引を作成します。テキストの着信ストリームを分類するには、SELECT文のWHERE句でMATCHES演算子を使用します。分類アプリケーションの一般的なフローは、図1-5を参照してください。

図1-5 ドキュメント分類アプリケーションの概要

図1-5の説明が続きます
「図1-5 ドキュメント分類アプリケーションの概要」の説明

1.5 XML検索アプリケーション

XML検索アプリケーションは、XMLドキュメントで検索を実行します。通常のドキュメント検索では、ドキュメントのセットを検索して、テキスト述語を満たすドキュメントを戻します。XML検索では、通常はXMLドキュメントの構造を使用して、検索を制限します。通常は、検索を満たすドキュメントの一部のみが戻されます。たとえば、electricというワードを含むすべての購買依頼を検索する必要はなく、コメント・フィールドにelectricが含まれる購買依頼のみが必要な場合などです。

Oracle Textを使用すると、次のアプローチによってXML検索を実行できます。

1.5.1 XML検索アプリケーションでのCONTAINS演算子

CONTAINS演算子は構造化検索に最適であり、WITHINHASPATHおよびINPATHの各演算子を使用して制限検索を実行できます。CONTEXT索引を使用する場合、Oracle Text検索の次の特性も利用できます。

  • トークンベースで空白が正規化された検索

  • 関連性の度合によってランク付けされたヒットリスト

  • 大/小文字を区別する検索

  • セクション検索

  • ステミング検索やファジー検索などの言語機能

  • 大きいドキュメント・セット向けにパフォーマンスが最適化された問合せ

警告:

Oracle Textを手動でアンインストールする際には、DBMS_XDBTパッケージを削除する必要があります。Oracle Textを手動で再インストールする際には、DBMS_XDBTパッケージを作成する必要があります。

Oracle Database 12c以降では、Oracle Databaseソフトウェアを新規インストールするときやアップグレードのとき、Oracle XML Databaseが自動的にインストールされます。

1.5.2 Oracle Textの機能とOracle XML DBの結合(XML検索索引)

Oracle Textの機能とOracle XML DBを結合して、全テキスト検索を実行するアプリケーション用のXML検索索引を作成し、「Pentiumというワードを含むすべてのノードを検索」などの問合せを入力することで、XML構造を利用できます。Oracle Database 12cでは、XQuery全文検索の拡張機能に対するサポートを追加して、W3CのXQuery仕様のサポートが拡張されています。そのため、データベースに格納されているXMLコンテンツに対してXML対応の全文検索を実行することができます。

次の各トピックでは、Oracle TextアプリケーションでOracle XML DBを使用する方法について説明します。

関連項目:

1.5.2.1 XML検索索引に対するxml_enableメソッドの使用

XML検索索引はXML対応Oracle Text索引(CTXSYS.CONTEXT)です。この索引タイプは、統一的な1つの索引でIRスタイルの検索と構造化検索をサポートします。XML検索索引では、Oracle Text表に内部的にバイナリPDOMも格納されるので、バイナリPDOMと比較してXML操作を評価することができます。このXML検索索引は、XMLTYPEデータ・ストアでサポートされています。このようなXML検索索引が存在する場合、XMLEXISTSはシームレスにCONTAINSに書き込まれます。

XML検索索引が作成されると、XMLドキュメントのバイナリPDOMがOracle Textの内部表にマテリアライズされます。Text索引からの事後評価はリダイレクトされ、この内部表に格納されたPDOMに影響します。

関連項目:

XML検索索引へのXML対応を有効にするSET_SEC_GRP_ATTRxml_enable変数については、『Oracle Textリファレンス』を参照してください

次の例ではOracle XML検索索引を作成します。

exec
CTX_DDL.CREATE_SECTION_GROUP('secgroup','PATH_SECTION_GROUP');
exec
CTX_DDL.SET_SEC_GRP_ATTR('secgroup','xml_enable','t');
CREATE INDEX po_ctx_idx on T(X) indextype is ctxsys.context
parameters (‘section group SECGROUP');
1.5.2.2 Text-on-XMLメソッドの使用

Oracle Textを使用すると、XMLデータを含む列にCONTEXT索引を作成できます。列型はXMLTypeですが、XMLデータの正しい索引プリファレンスを使用する場合は、サポートされている任意の型にできます。

Text-on-XMLメソッドでは、標準のCONTAINS問合せを使用して、構造化制約を追加し、検索の範囲を特定のセクション、フィールド、タグまたは属性に制限します。つまり、テキスト演算子内に、WITHINHASPATHINPATHなどの構造を指定することになります。

たとえば、CONTEXT索引を設定し、XMLドキュメントを使用してセクションを作成します。購買依頼を定義する次のXMLドキュメントを考えてみます。

<?xml version="1.0"?>
<PURCHASEORDER pono="1">
   <PNAME>Po_1</PNAME>
   <CUSTNAME>John</CUSTNAME>
   <SHIPADDR>
      <STREET>1033 Main Street</STREET>
      <CITY>Sunnyvalue</CITY>
      <STATE>CA</STATE>
   </SHIPADDR>
   <ITEMS>
     <ITEM>
       <ITEM_NAME> Dell Computer </ITEM_NAME>
       <DESC> Pentium 2.0 Ghz 500MB RAM  </DESC>
     </ITEM>
     <ITEM>
       <ITEM_NAME> Norelco R100 </ITEM_NAME>
       <DESC>Electric Razor </DESC>
     </ITEM>
   </ITEMS>
</PURCHASEORDER>

品目の説明セクション内にPentiumを含むすべての購買依頼を問い合せるには、WITHIN演算子を使用します。

SELECT id from po_tab where CONTAINS( doc, 'Pentium WITHIN desc') > 0;

INPATH演算子を使用して、XPATH式でより複雑な基準を指定します。

SELECT id from po_tab where  CONTAINS(doc, 'Pentium INPATH (/purchaseOrder/items/item/desc') > 0;
1.5.2.3 JSONデータの索引付け

JavaScriptオブジェクト注釈(JSON)は、構造化データのシリアライズや、ネットワーク経由(通常はサーバーとWebアプリケーション間)のデータの交換に使用される、言語に依存しないデータ形式です。JSONではJavaScriptオブジェクト・リテラル、配列、スカラー・データのテキストベースの表現方法が提供されます。詳細は、『Oracle Database JSON開発者ガイド』のJSONに関する章を参照してください。

関連項目:

JSONでの検索索引の作成の詳細は、『Oracle Textリファレンス』を参照してください。