自定义 XML 项处理

上次修改时间: 2015年3月9日

适用范围: SharePoint Server 2010

本文内容
XML 映射器概述
对 XML 内容进行爬网
格式检测与项分析
自定义 xmlmapper.xml
xmlmapper.xml 的文件格式
XML 映射器配置示例

FAST Search Server 2010 for SharePoint 中的项处理管道包含可选 XML 映射器阶段,它用于创建从已爬网 XML 项的特定部分创建已爬网属性。有关如何在项处理管道中启用 XML 映射器阶段的信息,请参阅配置可选项处理

本文介绍如何使用配置文件 xmlmapper.xml 配置属性映射,如下所示:

XML 映射器概述

将 XML 映射器用于对基于 XML 的文档(这些文档需要自定义提取和转换)进行 Web 和文件共享爬网。通过在管道中启用 XML 映射器,将映射作为基于 XML 的文档的所有已爬网项。由于配置可能会无意中匹配不需要的已爬网 XML 项,因此不要将 XML 映射器用于对未知内容或多个源进行爬网。

可以将 XPath 1.0 与配置文件自身提供的功能一起使用来指定要映射的部分 XML 内容。例如,可以处理多个表达式、添加字符串分隔符、拆分字符串以及删除空格。

对于每个映射语句,指定已提取的 XML 内容将映射到的已爬网属性。有关已爬网属性的详细信息,请参阅规划索引架构 (FAST Search Server 2010 for SharePoint)(该链接可能指向英文页面)索引架构引用

对 XML 内容进行爬网

通过在管道中启用 XML 映射器,将映射作为基于 XML 的文档的所有已爬网项。因此,应确保仅对已知的 XML 内容进行爬网。如果对未知内容或多个源进行爬网,则可能会无意中匹配因其他目的使用映射的 XML 元素的已爬网 XML 项。这可能导致索引中的元数据不正确。

可通过两大方式将 XML 内容爬网到 FAST Search Server 2010 for SharePoint。

  • 使用内容 SSA(FAST 搜索连接器)对 XML 文档进行爬网。这将使您能够从 Web 服务器、文件共享和 SharePoint 文档库检索 XML 文档。

    备注

    已爬网项可包含多个部分,如 SharePoint 列表项或带多个附件的电子邮件。XML 映射器将映射只出现在已爬网项的第一(主要)部分中而非附件中的 XML 内容。

  • 使用 FAST 搜索数据库连接器从数据库表的列中检索 XML 内容(有关详细信息,请参阅 Microsoft TechNet 上的使用 FAST 搜索数据库连接器对数据库内容进行爬网(该链接可能指向英文页面))。在基于 SQL 的爬网规则中,可以指定将数据库表中的给定列映射到名为 data 的预定义的内部属性。在将一个文档从索引连接器传递到项处理管道时,此属性即为包含该文档的主要内容的内部属性。

    以下示例演示了一个简单的爬网规则,此爬网规则从名为 Product 的表中将产品的基于 XML 的正式说明检索到名为 data 的内部属性。

    SELECT Product.formalDescription AS data FROM Product
    
    重要注释重要说明

    data 属性无法作为已爬网属性进行映射,但在此示例中,该属性仍将视为表示 XML 类型文档的内容。格式检测与项分析中描述的内容类型注意事项也将适用于这些类型的项。

格式检测与项分析

项处理管道通过分析已检索项中的实际数据来检测内容的类型。如果内容包含有效的 XML,则将它视为 XML 并使用 XML 映射器对其进行转换。有些 XML 内容可能不具有有效的 XML 声明,也可能包含在 HTML 中频繁使用的元素名称。在此情况下,已爬网的 XML 项可能被误认为是 HTML 项。解决此问题的一个方法是,跳过针对文件扩展名为".xml"的已爬网项的格式检测。可以通过在配置文件 user_converter_rules.xml 中添加以下转换规则来实现此目的。

<ConverterRules>
   <IFilter>
      <trust>
         <ext name=".xml" mimetype="text/xml" />
      </trust>
   </IFilter>
</ConverterRules>

此配置可确保始终将扩展名为".xml"的文件视为 XML 内容。有关详细信息,请参阅将 FAST Search Server for SharePoint 配置为使用第三方 IFilter

项处理管道会将所有项(包括 XML 项)的正文映射到名为 body 的托管属性。这意味着,可在默认的全文本索引和名为 body 的托管属性中搜索所有元素和属性的内容。除了使用 XML 映射器执行的可选映射之外,还可以执行此操作。如果 XML 的部分(或所有)内容为元数据,则可能需要对此映射进行更细化的控制。可以将 XML 的更具体的部分(甚至虚拟值)映射到名为 body 的托管属性。以下过程将指定如何执行此映射。

将特定的 XML 内容映射到 body 托管属性

  1. 指定一个 XML 映射器配置,该配置将 XML 的特定部分映射到一个具有唯一名称的新的已爬网属性。

  2. 指定将此已爬网属性映射到名为 body 的托管属性。有关详细信息,请参阅 Microsoft TechNet 上的使用 Windows PowerShell 管理已爬网属性 (FAST Search Server 2010 for SharePoint) (该链接可能指向英文页面)

  3. 确保 body 具有索引架构中设置的 MergeCrawledProperties 标志。有关详细信息,请参阅 TechNet 上的使用 Windows PowerShell 管理托管属性 (FAST Search Server 2010 for SharePoint) (该链接可能指向英文页面)

自定义 xmlmapper.xml

若要修改此配置文件,您必须是 FAST Search Server 2010 for SharePoint 管理节点上的 FASTSearchAdministrators 本地组的成员。

修改 xmlmapper.xml

  1. 确保在项处理管道中启用 XML 映射器阶段。有关详细信息,请参阅配置可选项处理

  2. 在管理节点上,创建以下文件(如果该文件不存在):%FASTSEARCH%\etc\config_data\DocumentProcessor\XMLMapper.xml。

  3. 在文本编辑器中编辑 %FASTSEARCH%\etc\config_data\DocumentProcessor\XMLMapper.xml。

  4. 运行命令 psctrl reset 以重置系统中当前运行的项处理器。

xmlmapper.xml 的文件格式

以下是 xmlmapper.xml 文件的基本结构。

<XMLPropertiesCreator>
  <propset>propertySetValue</propset> 
  <type>variantTypeValue</type> 
  <paragraph-sep>paragraphSeparatorValue</paragraph-sep>
  <XMLMappings>
    <Namespace name='namespaceName' uri='uriName' />
    <Mapping path='XPath' attr='propName' propset='GUID' type='varType'
             sep-str='separator' post-str='postString'
             ignore-whitespace='yes|no' strip-tags='yes|no'
             shallow='yes|no' mode='append|prepend|overwrite' />

    <SubTree base-path='basePath' >
      <Mapping path='XPath' attr='propName' propset='GUID' type='varType'
               sep-str='separator' post-str='postString'
               ignore-whitespace='yes|no' strip-tags='yes|no'
               shallow='yes|no' mode='append|prepend|overwrite' />
    </SubTree> 
    <MappingGroup base-path='basePath' attr='propName' propset='GUID' type='varType' 
                                    sep-str='separator' pre-str='preString' post-str='postString' 
                                    rec-sep-str='recSeparator' rec-pre-str='recPreString' rec-post-str='recPostString' 
                                    select='merge|first|longest' mode='append|prepend|overwrite' >
      <Mapping path='XPath' sep-str='separator' post-str='postString'
               ignore-whitespace='yes|no' strip-tags='yes|no' shallow='yes|no' /> 
    </MappingGroup>
  </XMLMappings>
</XMLPropertiesCreator>

有关各个元素的 XML 语法的信息,请参阅 XML 映射程序架构

XML 映射器配置示例

对于此示例,请考虑将以下 XML 项作为内容输入。

<Document>
  <Title>My title</Title>
  <Date>2010-01-06T14:25:04Z</Date>
  <Size>128</Size>
  <Tags>
    <Tag>funny</Tag>
    <Tag>hilarious</Tag>
  </Tags>
  <Tutti>Hello</Tutti>
  <Frutti>World</Frutti>
</Document>

以下示例提供一个 XML 映射器配置,该配置从此类项中提取信息。

<XMLPropertiesCreator>
  <propset>d6ee4933-09c4-46e3-a5e4-b3787cb4a090</propset>
  <type>31</type>
  <XMLMappings>
    <Mapping attr="mytitle" path="//Title"/>
    <Mapping attr="mysize" path="//Size" type="3"/>
    <Mapping attr="mydate" path="//Date" type="64" propset="38c35ad5-69ee-4776-886f-95961a73d52d"/>
    <Mapping attr="mytags" path="//Tag" sep-str=";"/>
    <MappingGroup attr="mymulti" base-path="/Document" select="first">
      <Mapping path="Tutti"/>
      <Mapping path="Frutti"/>
    </MappingGroup>
  </XMLMappings>
</XMLPropertiesCreator>

在此示例中,XML 映射器将应用表 1 所示的映射。

表 1. XML 映射器映射

元素

映射到

//Title

变量类型设置为"31"的属性集"d6ee4933-09c4-46e3-a5e4-b3787cb4a090"中的 mytitle。

//Size

变量类型设置为"3"的属性集"d6ee4933-09c4-46e3-a5e4-b3787cb4a090"中的 mysize。

//Date

变量类型设置为"64"的属性集"38c35ad5-69ee-4776-886f-95961a73d52d"中的 mydate。

//Tag

变量类型设置为"31"的属性集"d6ee4933-09c4-46e3-a5e4-b3787cb4a090"中的 mytags。多个元素匹配项将用分号隔开。

/Document/Tutti

变量类型设置为"31"的属性集"d6ee4933-09c4-46e3-a5e4-b3787cb4a090"中的 mymulti。select="first" 表示仅匹配第一个匹配元素。在此情况下,表示提取文本"Hello"。

请参阅

概念

XML 映射程序架构

配置可选项处理