e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 程序开发 >> XML教程 >> DB2 中的 XML 全文搜索 >> 教程正文
 
教程搜索
 
 
相关教程
  • XML技术入门
  • XML中的常见问题
  • Sparks.com用XML和XSL来生成动态页面
  • 使用XML上传文件
  • 用XML实现弹出式菜单(附图)
  • XML编程实例(二)
  • 编制新的MSDN目录(FromMSDN)
  • XML数据的编码方式
  • XML和数据库
  • XML编程实例(一)
  • 标记语言巨星访谈录--与JamesClark同步
  • XSLT轻松入门提纲
  • XSLT轻松入门第二章:XSLT的实例(1)
  • XSLT轻松入门第二章:XSLT的实例(3)
  • XSLT轻松入门第三章:XSLT的元素语法(
  • XSLT轻松入门第五章:XSLT的资源
 
 

图文教程


  • Windows抢了谁的饭碗 非主流操作系统To

  • 地球还是火星 平常心看“非主流”

  • 综合运用Office 2007批量制作奖状

  • 没有系统盘如何才能修复受损系统?

  • 巧妙运用Excel中边界的附加功能!
 
 
赞 助 商
 
 
DB2 中的 XML 全文搜索
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9

通过支持原生存储 XML 文档,IBM® DB2® 9 向着混合型数据库系统迈出了革命性的一步。XQuery(DB2 中新的主要语言)允许以优化的方式操作 XML。但是,XML 也常常包含大块文本,无法用 XQuery 轻松地搜索它们。为了高效地搜索文档的这些非结构化部分,DB2 提供了一个全文搜索解决方案。本文主要关注 DB2 文本搜索的基本知识,包括创建文本索引和管理。本文还讨论 DB2 全文搜索的特定特性,比如用模糊搜索、接近搜索和词根化在 XML 文档中搜索关键字或短语。

XQuery 是用于访问 XML 数据的 W3C 标准,提供了许多用来导航和查询 XML 文档的扩展。也可以使用这种语言根据全文搜索条件搜索 XML 文档吗?答案是 “还不行”。XQuery 中目前不支持全文搜索特性。其原因在于 XQuery Data Model,这是每个 XQuery 表达式的基础。为了能够高效地搜索全文数据,需要关于组成数据文本内容的各个单词及其位置的信息。但是,在 XQuery Data Model 中,文本只是一个 “黑盒”。数据模型没有表示文本节点中的单词或符号的概念;它只是将元素或属性的文本内容表示为一个后续节点。

因此,XQuery 最多只能进行子字符串匹配。这个功能是用内置函数 contains() 实现的,这个函数以一个上下文和搜索词作为参数。

由于 DB2 9 将 XQuery 作为主要语言,在 DB2 命令窗口中可以执行以下 XQuery 表达式:

db2 => XQuery contains("e power of XML", "owe")

如前所述,contains() 函数实现子字符串匹配,因此对于以上查询返回 true。尽管用户搜索的是 “owe”,但是 contains() 也返回 “power” 等单词,这些可能不是用户实际上要寻找的搜索结果。还没有将文本搜索功能包含进 XQuery 语言中的标准。显然,这是 XQuery, Version 1 要完成的任务之一,已经在一个单独的工作组开始研究工作了:XQuery 1.0 and XPath 2.0 full text。

在等待这个新标准出台的同时,目前能够根据关键字和短语搜索相关的 XML 文档吗?下一节简要概述 DB2 的全文搜索功能,它允许对 XML 进行感知结构的文本搜索。

DB2 Net Search Extender

在对 XML 文档进行文本搜索时,要同时考虑实际内容和文档结构。一种典型的场景是将文本搜索限制在特定的元素或整个 XML 文档结构的子树上,比如:


“寻找在 abstract 元素中有 ‘XML’ 和 ‘database’,并且在 title 元素中有 ‘text search’ 和 ‘Viper Release’ 的所有文档,这两个词应该在同一句话中。”

在 DB2 中,这种感知结构的 XML 文档全文搜索是通过 DB2 Net Search Extender(NSE)实现的,这是 DB2 附带的一种单独安装的特性。

文本搜索集成到 SQL 中,DB2 优化器在运行时会对它进行优化。可以使用 DB2 Control Center 执行创建和维护索引等管理任务。

Net Search Extender 使用 SQL 搜索数据库表的列中存储的文本数据。Net Search Extender 并不使用字符串匹配连续地搜索文本数据(就像 XQuery contains() 函数所做的那样),而是使用文本索引。使用文本索引使文档搜索的效率大大提高,因为不需要像进行子字符串匹配时那样在查询时检查文本数据。文本索引通常包含关于从文本文档中提取的相关词的信息。在 XML 文档的情况下,文本索引中不但包含重要的词汇,而且包含它们在 XML 文档结构中的位置。

既然已经熟悉了 Net Search Extender 的基本原理,就可以开始学习如何使用它对 XML 数据执行全文搜索。下一节中讨论如何创建文本索引。

为文本搜索做准备

搜索 DB2 中的 XML 文档需要执行的任务分成两部分:

  1. 索引管理任务
  2. 全文搜索

本节简要讨论这两种任务,使用的示例针对 清单 1 中定义的 “product” 表。注意,“product” 表的 “description” 和 “comments” 列是 XML 类型的(换句话说,“description” 和 “comments” XML 文档原生存储在数据库中)。

清单 1. 表定义

create table product ( pid varchar(10) primary key not null, description xml, comments xml );

“product.description” 和 “product.comment” 列中存储的 XML 数据示例分别见 图 1 和 图 2。后面的查询示例搜索这些 XML 文档的特定元素。“DB2 Viper 快速入门” (developerWorks,2006 年 3 月)讨论了如何在 DB2 中插入 XML 文档。

图 1. “product.description” 列的数据示例

图 2. “product.comments” 列的数据示例

首先考虑一下对 “product” 表执行文本搜索操作时需要做什么,比如搜索在评论的 “message” 元素中有单词 “satisfactory” 的产品的名称,或者在描述的 “details” 元素中有短语 “sugar and creamer” 的产品的名称。

在使用 Net Search Extender 之前,必须先启动它的实例服务,见 清单 2。

清单 2. 启动 Net Search Extender 实例服务的命令

db2text start

注意,这个命令调用一个单独的可执行程序 db2text。以后会看到,任何文本索引管理任务都需要用命令 db2text 来执行。

在启动 Net Search Extender 之后,对 DB2 数据库启用文本搜索操作。这个步骤创建必需的管理表以及各种用户定义函数(UDF)和存储过程(STP),这是对 DB2 数据进行全文搜索所需要的,而且对每个数据库只执行一次。

对数据库 “test” 启用文本搜索操作的命令如下:

清单 3. 对数据库 “test” 启用文本搜索操作的命令

db2text enable database for text connect to test

如果还没有设置 DB2DBDFT 环境变量,那么所有 Net Search Extender 管理任务都需要 connect to <dbname> 子句,其中的 <dbname> 是数据库的名称。以下命令假设设置了 DB2DBDFT。

在为数据库启用文本搜索操作之后,可以在以各种格式(比如 XML)存储文本数据的列上创建文本索引。create index 命令定义文本索引属性,比如更新频率、文档格式、索引目录等等,从而建立文本索引基础设施。关于各种索引属性的更多信息,请参考 Net Search Extender 文档。本文中的示例使用一个基本的文本索引创建过程,见 清单 4:

清单 4. 在 “product.description” 上创建文本索引 ix1

db2text create index ix1 for text on product(description)

清单 4 中的命令在 “product” 表的 “description” 列中本机存储的 XML 文档上创建一个名为 “ix1” 的全文索引。


注意,在创建文本索引之后,文本搜索还不能找到任何结果,因为此时文本索引不包含任何数据。如果没有指定更新频率,那么需要显式地对数据和文本索引进行同步。对文本索引进行同步的任务称为索引更新,通常在创建文本索引之后立即执行。

清单 5. 使文本索引与基表中的数据同步

1 2 3 4 5 6 下一页
  • 上一篇教程: DB2 9 XML 性能特征
  • 下一篇教程: XML 表单生成,第 1 部分: 从使用 XML
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.