技术开发 频道

DB2 中的 XML 全文搜索

    XML 名称空间考虑事项

    在 XML 数据属于特定的非默认名称空间的情况下,在搜索文档结构中的特定元素或子树时必须使用完全限定的名称(名称空间前缀+元素 名称)。

    假设 XML 产品数据的元素属于一个以 “ns” 为前缀的名称空间。

    图 4. 具有名称空间的 XML 产品数据


   

    对于前一个搜索示例,Net Search Extender 在这种情况下找不到任何结果:

    清单 28. Net Search Extender 找不到任何结果 

SELECT pid FROM product WHERE CONTAINS(description, 'SECTION("/product/description/details") "pattern"')=1;

   用来定义要搜索的 XML 部分的 XPath 表达式没有包含名称空间前缀 —— 换句话说,没有包含完全限定的元素名称(QName)。

    在 SECTION 参数中必须使用完全限定的 XML 元素名称,才能搜索示例文档:

    清单 29. 在 SECTION 参数中使用完全限定的 XML 元素名称

SELECT pid FROM product WHERE CONTAINS (description, 'SECTION("/ns:product/ns:description/ns:details") "pattern"IN SAME SENTENCE AS "sugar and creamer"')=1;

   Net Search Extender 按照元素/属性名称在文档中出现的形式对它们进行匹配,包括任何名称空间前缀。但是,如果使用默认名 称空间,那么就不必给元素加前缀!

    对如何定位 XML 文档结构中的各个部分进行配置的一种方法是使用 Net Search Extender 文档模型。下一节解释它的使用方法。

    NSE 文档模型揭秘

    可以使用 Net Search Extender 文档模型配置结构化文档(比如 XML)中要搜索的范围。文档模型主要控制文档结构的哪些 部分要建立 索引、这些部分如何 建立索引以及在搜索期间用哪些名称 引用这些文档部分。

    有两种文档模型:

    默认文档
    用户定义的定制文档模型
    要使用定制的文档模型,就必须在创建文本索引时指定一个文档模型。如果没有通过索 引参数提供定制的文档模型,那么 Net Search Extender 使用它的默认模型。

    到目前为止,本文中的示例都使用 Net Search Extender 提供的默认文档模型。默认文档模型的性质是:

    文档的所有部分都建立索引(对于 XML 文档,这包括所有元素和属性)
    可以使用与 XPath 相似的语法将搜索限制到特定的文档 部分
    数值不建立索引,所以不支持数值比较或范围搜索
    如果使用定制的文档模型,就可以:

    定义 XML 文档的哪些部分应该建立索引,哪些部分应该排除在索引之外
    为某些 XML 子树、XML 元素或属性定义定制的名称
将 XML 元素或属性内容定义为数值,从而允许在此内容上进行数值比较或范围搜索
    文档模型本身是一个 XML 文档,它采用一种预 定义的语法(语法定义见 Net Search Extender 文档)。文档模型在一个文件中定义,它们指定对结构化文档(例如 XML 格式的文档)进 行解析和建立索引的模型。在创建索引期间,模型文件作为参数传递,而且只在此期间被读取;以后的修改不影响现有的索引。

    图 5 针对产品数据(参见 清单 1)定义了一个定制文档模型。这个文档模型存储在文件 nsemodel.xml 中。

    图 5. 定制文档模型


   

    每个 XML 文档模型都以 “XMLModel” 元素开头。XMLModel 可以有两个 XML 子元素:

    表 2. NSE XML 模型文件元素
    模型文件元素 说明
    XMLFieldDefinition 这个元素为 XML 文档的特定部分、元素或属 性(由 “XMLFieldDefinition” 的 “locator” 属性标识)定义一个定制的名称
    XMLAttributeDefinition 这个元素在可以用于数 值(参数化)搜索的 XML 元素或 XML 属性上定义一个 NSE 属性

0
相关文章