如何搜索存储的 XML 文档
本文中以数据库名 DEMO和create table t1 (c1 varchar(10) not null primary key,c2 xml)为例
需要如下几个步骤:
1. 启用全文检索服务
db2text enable database for text connect to demo
2. 启动全文检索服务
db2text start
3. 创建全文检索索引
db2text create index i1 for text on t1(c2) connect to demo
4. 更新全文检索索引信息
db2text update index i1 for text connect to demo
5. 搜索信息
下列将详细描述对 XML 文档如何建立索引进行搜索,以及如何将此功能集成到 XQuery 处理中。SELECT c2 FROM t1
WHERE CONTAINS(c2, SECTIONS("/purchaseOrder/item/name") “Rake”) = 1
通常,对 XML 数据列创建索引时,不需要指定格式(FORMAT)。缺省情况下,当对 XML 列创建文本索引时,Net Search Extender 将选择 XML 格式。不允许对 XML 数据列使用格式说明符 TEXT 和 HTML。
在用来说明对 XML 列创建和使用文本索引的后续样本中,使用了以下 XML 文档。该 XML 文档存储在 t1 表的 c2 列(类型为 XML)中。
<?xml version="1.0">
<purchaseOrder orderDate="2001-01-20">
<shipAddress countryCode="US">
<name>Alice Smith</name>
<street>123 Maple Street</street>
<city>Mill Hill</city>
<zip>90999</zip>
</shipAddress>
<item partNo="123" quantity="1">
<name>S&B Lawnmower Type ABC-x</name>
<price>239.90</price>
<shipDate>2001-01-25</shipdate>
</item>
<item partNo="987" quantity="1">
<name>Multifunction Rake ZYX</name>
<price>69.90</price>
<shipDate>2001-01-24</shipdate>
</item>
</purchaseOrder>
使用缺省文档模型建立索引
如果在 CREATE INDEX 语句中没有指定任何文档模型,那么 Net Search Extender 将使用缺省文档模型。
缺省文档模型的一个特征就是:节名在用于指定每个元素和属性的绝对路径的 XPath 表示法中。注意,搜索查询中的节名并不是在执行查询期间求值的 XPath 表达式。它们是用来表示结构化文档中的特定部分(元素和属性)的一些名称。
如果您未在使用模型文件,那么按如下所示为 XML 文档定义文本索引:
db2text CREATE INDEX i1 FOR TEXT ON t1(c2) CONNECT TO demo
由于 c2 列的数据类型为 XML,因此可以省略 FORMAT 规范。在此情况下,FORMAT 规范缺省设置为 XML。
当未指定文档模型时,对于每个 XML 元素,都将根据它在文档中的绝对 XPath 来自动为它指定一个名称。例如,在搜索查询中,通过节名 /purchaseOrder/item/price 就可以访问 price 元素。使用节名 /purchaseOrder/shipAddress/@countryCode 就可以访问 countryCode 属性。
在使用 db2text update 命令更新索引之后,将 SECTION 搜索与标量搜索函数配合使用的 SQL 表达式可能如下所示:
查询将返回如上所示的样本 XML 文档。SELECT c2 FROM t1
WHERE CONTAINS(c2, SECTIONS("/purchaseOrder/item/name") “Rake”) = 1
