企业级搜索协议处理程序

通过使新的内容源为 Microsoft Office SharePoint Server 2007 企业级搜索所用,协议处理程序可扩展搜索功能。本主题概述了协议处理程序以及它们如何适合于企业级搜索体系结构,并论述了使用协议处理程序接口来实现协议处理程序以便对自定义内容源进行爬网。

企业级搜索索引系统概述

企业级搜索索引系统由若干不同的组件组成,如以下列表中所述。

  • 索引引擎 使用内容源和为搜索服务配置的爬网规则管理内容爬网过程。索引引擎维护一个爬网 URL 队列,同时在内容爬网过程中将爬网 URL 传递到筛选器端口监控程序。爬网 URL 队列最初是用内容源起始地址填充的。

  • 内容源 指定要爬网的内容。

  • 爬网规则 指定要从爬网中排除的内容,以及要用于爬网的凭据。

  • 筛选器端口监控程序 通过确定要使用的适当协议处理程序处理来自索引引擎的爬网 URL 请求。通过使用协议处理程序,筛选器端口监控程序将获取内容,同时提取并分析文本和属性,然后调用适当的 IFilter(如果需要)。

  • 协议处理程序 以内容源的本机协议打开内容源并公开要筛选的文档和其他项目。

  • IFilters 用本机格式打开文档和其他内容源项目并筛选为文本块和属性块。IFilter 实现可以是协议处理程序组件的一部分,也可以是单独的组件。

协议处理程序概述

协议处理程序是一种实现 ISearchProtocol 接口的自由线程 COM 对象。

协议处理程序在索引服务器上注册,位置为 HKLM\Software\Microsoft\OfficeServer\12.0\Search\Setup\ProtocolHandlers.

URL 架构

协议处理程序的 URL 架构的格式为 scheme://hostname/path.extension.

筛选器端口监控程序使用 URL 架构来确定要为特定爬网 URL 使用哪种协议处理程序。有关详细信息,请参阅爬网过程。

协议处理程序类型

企业级搜索支持两种类型的协议处理程序:

  • 分层协议处理程序 适用于包括结构(例如必须遍历的目录或文件夹)的结构化内容源,例如文件共享。

  • 基于链接的协议处理程序 适用于诸如网站等内容源,在这些内容源中,内容中的链接指示对源进行遍历的方式。

初始化协议处理程序

筛选器端口监控程序通过为协议处理程序的 ISearchProtocol 实现调用 Init 方法来初始化所有注册的协议处理程序。筛选器端口监控程序使用 ISearchProtocol 方法处理来自索引引擎的爬网 URL。下一节中描述了此过程。

爬网过程

索引引擎启动对内容源的爬网。有两种类型的爬网:

  • 完全爬网 对所有内容进行的爬网。爬网 URL 队列最初是用所爬网内容源的起始地址填充的。将会从队列中移除重复条目。在爬网过程中,当在筛选过程中发现爬网 URL 时,索引引擎即会将它们添加到队列。将会从内容索引中移除删除的项目。爬网过程将一直继续,直至爬网队列为空为止。

  • 增量爬网 只对修改的内容进行的爬网。爬网 URL 队列最初是用起始地址 URL 和该内容源的爬网历史记录中的 URL 填充的。索引引擎利用爬网 URL 将时间戳传递到筛选器端口监控程序。对于 SharePoint 内容,索引引擎依赖于 Windows SharePoint Services 3.0 中的更改日志功能,因此只会对更改日志中记录的内容进行爬网。

选择协议处理程序

筛选器端口监控程序基于爬网 URL 和 URL 架构为来自索引引擎的每个爬网 URL 确定适当的协议处理程序。例如,对于爬网 URL https://www.microsoft.com/,筛选器端口监控程序将选择默认 HTTP 协议处理程序,该处理程序是一种基于链接的协议处理程序。

对于爬网 URL \\CentralSales\Public\,筛选器端口监控程序将选择默认 File 协议处理程序,该处理程序是一种分层协议处理程序。

返回 URL 取值函数

将为每个爬网 URL 单独调用 ISearchProtocol 接口的 CreateAccessor 方法。

备注

每次 CreateAccessor 方法调用只会处理一个爬网 URL,但可以同时多次调用此方法。因此,多个线程可以并行工作。

CreateAccessor 方法返回一个 URLAccessor 对象,筛选器端口监控程序使用该对象来处理爬网 URL。URLAccessor 对象是在 IUrlAccessor 接口中实现的。

筛选内容

IUrlAccessor 接口包含 BindToFilter 方法和 BindToStream 方法;您必须为每个爬网 URL 至少实现这些方法其中之一。

BindToFilter

如果爬网 URL 未与由某个标准筛选器分析的二进制流关联,您必须实现 BindToFilter 方法。在此方案中,还必须实现 IFilter 作为 URLAccessor 对象的一部分。

您还可以实现 BindToFilter 方法来提取与内容项关联的元数据。协议处理程序会将包含属性和链接的数据块发送到索引引擎。

如果爬网 URL 是文件夹或目录,您应为协议处理程序实现 BindToFilter 方法以枚举文件夹或目录内容。然后,协议处理程序应发出每一项的 PID_GTHR_DIRLINK_WITH_TIME 属性。此属性包含该项的 URL 和时间戳。在增量爬网过程中,当索引引擎收到给定项的 PID_GTHR_DIRLINK_WITH_TIME 后,它将用爬网历史记录中为该项存储的值来检查时间戳。如果时间戳未更改,则不会对该项进行爬网。如果目录中没有更改,或者,如果单一项就爬网程序传递的时间戳而言未发生更改,则协议处理程序应为内容项返回 PRTH_S_NOT_MODIFIED,并且无需对该项进行进一步处理。有关 PRTH_S_NOT_MODIFIED 的详细信息,请参阅协议处理程序错误消息

这将提高增量爬网的效率,因为协议处理程序无需单独绑定到每一项,而只需绑定至已更改的那些项。

备注

如果协议处理程序的 BindToFilter 方法未实现发出 PID_GTHR_DIRLINK_WITH_TIME,并且 CreateAccessor 方法不支持返回 PRTH_S_NOT_MODIFIED,则增量爬网的执行方式在本质上与完全爬网相同。

BindToStream

如果存在必须由某个标准筛选器(例如文本、HTML 或 Microsoft Office 筛选器)分析的与爬网 URL 关联的二进制流,请实现 BindToStream 方法。BindToStream 方法将调用适当的筛选器来提取项的内容。

有关创建筛选器的详细信息,请参阅How to Write a Filter for Use by SharePoint Portal Server 2003 and Other Microsoft Search-Based Products

筛选器端口监控程序只会为每个爬网 URL 同时调用 BindToFilter 和 BindToStream 方法一次。其中一种方法必须成功,才能筛选与爬网 URL 关联的内容项。

安全性

GetSecurityDescriptor 方法检索与内容项关联的安全信息,例如为特定用户和用户组分配的不同种类的访问权限。如果实现此方法,筛选器端口监控程序将向索引引擎提供有关内容项的安全信息。索引引擎会将此信息合并到文档内容的全文检索中。

当查询引擎依据全文检索执行查询来确定提交搜索查询的用户是否有权访问结果中的项时,它将使用安全信息。查询引擎将根据此信息对搜索结果执行安全修整,以便用户只能看到他们有权访问的项显示在搜索结果中。因此,如果您未实现 GetSecurityDescriptor 方法,所有用户都将能够在他们的搜索查询结果中检索和查看项的内容。有关安全修整的详细信息,请参阅企业级搜索安全模型

本节内容

协议处理程序参考

See Also

参考

How to Write a Filter for Use by SharePoint Portal Server 2003 and Other Microsoft Search-Based Products

概念

企业级搜索体系结构

内容源概述