Oracle Textを使用すると、XMLデータを含む列にCONTEXT
索引を作成できます。列型はXMLType
ですが、XMLデータの正しい索引プリファレンスを使用する場合は、サポートされている任意の型にできます。
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;
INPATH
演算子を使用して、XPATH
式でより複雑な基準を指定します。
SELECT id from po_tab where CONTAINS(doc, 'Pentium INPATH (/purchaseOrder/items/item/desc') > 0;