1.5 XML検索アプリケーション
XML検索アプリケーションは、XMLドキュメントで検索を実行します。通常のドキュメント検索では、ドキュメントのセットを検索して、テキスト述語を満たすドキュメントを戻します。XML検索では、通常はXMLドキュメントの構造を使用して、検索を制限します。通常は、検索を満たすドキュメントの一部のみが戻されます。たとえば、electricというワードを含むすべての購買依頼を検索する必要はなく、コメント・フィールドにelectricが含まれる購買依頼のみが必要な場合などです。
Oracle Textを使用すると、次のアプローチによってXML検索を実行できます。
関連項目:
1.5.1 XML検索アプリケーションでのCONTAINS演算子
CONTAINS演算子は構造化検索に最適であり、WITHIN、HASPATHおよびINPATHの各演算子を使用して制限検索を実行できます。CONTEXT索引を使用する場合、Oracle Text検索の次の特性も利用できます。
-
トークンベースで空白が正規化された検索
-
関連性の度合によってランク付けされたヒットリスト
-
大/小文字を区別する検索
-
セクション検索
-
ステミング検索やファジー検索などの言語機能
-
大きいドキュメント・セット向けにパフォーマンスが最適化された問合せ
警告:
Oracle Database 12c以降では、Oracle Databaseソフトウェアを新規インストールするときやアップグレードのとき、Oracle XML Database (XML DB)が自動的にインストールされます。
関連項目:
1.5.2 Oracle Textの機能とOracle XML DBの結合(XML検索索引)
アプリケーションの全文検索をする場合、Oracle TextおよびOracle XML DBの機能を組み合せて、XML検索索引を作成します。この場合、"find all nodes that contain the word Pentium"などの問合せを入力することで、XML構造を利用できます。Oracle Database 12cでは、XQuery全文検索の拡張機能に対するサポートを追加して、W3CのXQuery仕様をOracleで拡張しています。このサポートにより、データベースに格納されているXMLコンテンツに対してXML対応の全文検索を実行できます。
次の各トピックでは、Oracle TextアプリケーションでOracle XML DBを使用する方法について説明します。
関連項目:
-
XML対応を有効にする
SET_SEC_GRP_ATTRのxml_enable変数については、『Oracle Textリファレンス』を参照してください -
XML全文索引およびXML検索索引については、『Oracle XML DB開発者ガイド』を参照してください
1.5.2.1 XML検索索引に対するxml_enableメソッドの使用
XML検索索引はXML対応Oracle Text索引(CTXSYS.CONTEXT)です。この索引タイプは、統一的な1つの索引で情報取得検索と構造化検索をサポートします。XML検索索引では、Oracle Text表に内部的にバイナリ永続ドキュメント・オブジェクト・モデル(PDOM)も格納されるので、バイナリPDOMと比較してXML操作を評価することができます。このXML検索索引は、XMLTYPEデータ・ストアでサポートされています。このようなXML検索索引が存在する場合、XMLEXISTSはシームレスにCONTAINS問合せに書き込まれます。
XML検索索引を作成すると、XMLドキュメントのバイナリPDOMがOracle Textの内部表にマテリアライズされます。Oracle Text索引からの事後評価はリダイレクトされ、この内部表に格納されたPDOMに影響します。
関連項目:
XML検索索引へのXML対応を有効にするSET_SEC_GRP_ATTRのxml_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索引を作成できます。列型は、XMLデータの正しい索引プリファレンスを使用する場合は、XMLTypeまたはサポートされている任意の型にできます。
Text-on-XMLメソッドでは、標準のCONTAINS問合せを使用して、構造化制約を追加し、検索の範囲を特定のセクション、フィールド、タグまたは属性に制限します。つまり、テキスト演算子内に、WITHIN、HASPATH、INPATHなどの構造を指定することになります。
たとえば、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;
XPATH式でより複雑な基準を指定するには、INPATH演算子を使用します。
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オブジェクト・リテラル、配列、スカラー・データのテキストベースの表現方法が提供されます。
関連項目:
-
JSONでの検索索引の作成の詳細は、『Oracle Textリファレンス』を参照してください。
-
JSONの詳細は、『Oracle Database JSON開発者ガイド』を参照してください。