管理范围规则

使用爬网范围管理器(CSM)可以定义范围规则,这些规则包括或排除 Windows 搜索爬网范围中的 URL。

CSM 允许执行以下操作:

  • 将新的范围规则添加到工作规则集
  • 删除现有范围规则
  • 枚举默认作用域规则
  • 发现特定 URL 是包含在抓取范围中还是从抓取范围中排除,或者是否存在父范围规则或子范围规则。

 

本主题包括以下主题:

关于范围规则

范围规则是用于指定在搜索起始点包含或排除 URL 以进行爬网和索引的规则。 包含规则会使索引器在爬网范围中包括该 URL,而排除规则会使索引器从爬网范围中排除该 URL(及其子 URL)。

例如,假设你安装了一个新应用程序,该应用程序的数据文件位于本地计算机上的 WorkteamA\ProjectFiles 文件夹中。 假设您希望索引 ProjectFiles 文件夹中的所有内容,但不包括 Prototypes 子文件夹中的项目。 在这种情况下,您需要为 myPH:///C:\WorkteamA\ProjectFiles\ 制定包含规则,并为 myPH:///C:\WorkteamA\ProjectFiles\Prototypes\ 制定排除规则。

有三种类型的规则,优先级如下:

  1. 组策略规则由管理员设置,可以替代所有其他规则。
  2. 用户规则由用户在 Windows 搜索选项用户界面中修改范围来设置。 用户或其他应用程序可以删除所有用户规则并还原为默认规则。
  3. 默认规则通常由应用程序设置以定义默认范围。 例如,将新的协议处理程序或容器添加到系统时,可能会设置默认规则。

这些类型的规则共同构成了爬网范围管理器(CSM)从中生成要爬网的 URL 的完整列表 的工作规则集 。 虽然默认规则可以由组策略规则和用户规则覆盖,但它们仍然保留在其自身的默认规则集中,您可以随时还原这些规则。 索引器对工作规则集中的 URL 进行爬网,并将项、属性和内容添加到目录中。

注释

有权访问控制面板的用户可以通过该界面修改规则。 因此,提供范围管理的应用程序应始终使用枚举方法直接从 CSM 获取规则,而不是依赖于保存的用户规则副本。

 

排除规则可以使用通配符“*”定义模式 URL;例如:file:///C:\ProjectA\*\。 使用此模式的排除规则可防止索引器对 ProjectA 目录下的任何文件夹进行爬网。 对于更复杂的示例,假设有一个包含规则 file:///C:\ProjectA\ 和一个排除规则 file:///C:\ProjectA\*\data\*。 在这种情况下,索引器将抓取以下项:

  • C:\ProjectA\
  • C:\ProjectA\version1\testfiles\
  • C:\ProjectA\version1\temp\data\

但是索引器不会抓取以下项目:

  • C:\ProjectA\version1\data\

 

在您开始之前

在使用任何爬网范围管理器接口之前,您必须执行以下预备步骤:

  1. 创建 CSearchManager 对象并获取其 ISearchManager 接口。
  2. 为“SystemIndex”调用 ISearchManager::GetCatalog 以获取 ISearchCatalogManager 接口的实例。
  3. 调用 ISearchCatalogManager::GetCrawlScopeManager 以获取 ISearchCrawlScopeManager 接口的实例。

对爬网范围管理器进行任何更改后,必须调用 ISearchCrawlScopeManager::SaveAll 方法。 此方法不采用任何参数,并在成功时返回S_OK。

 

添加范围规则

CSM 的工作规则包括用户和默认规则,以及组策略强制设置的任何规则。 用户规则由用户界面中的用户设置,默认规则可由以下任一设置:

  • 系统管理员实施的组策略(这些策略不使用 ISearchCrawlScopeManager 接口)。
  • Windows 搜索或协议处理程序等应用程序的安装或更新
  • 用于添加新数据存储或容器的设置应用程序

ISearchCrawlScopeManager 提供了两种方法来添加新的范围规则,如下表所述。 文件系统包含规则的路径必须以反斜杠“\”(例如,file:///C:\files\)结尾,排除规则的路径必须以星号结尾(例如,file:///c:\files\*)。 只有排除规则可以包含模式 URL。 此外,我们建议在路径中包含用户的安全标识符(SID),以提高安全性。 每用户路径更安全,因为查询随后将在每用户的进程中运行,确保一个用户无法查看从其他用户收件箱索引的项目,例如。

下表描述了用于添加新作用域规则的 ISearchCrawlScopeManager 接口的方法。

方法 Description
AddUserScopeRule 为 URL 添加规则,由用户指定。 这些规则将替代默认规则。 如果已实现允许用户管理自己的范围规则和 URL 的用户界面,请使用此方法。
AddDefaultScopeRule 为 URL 添加规则,此规则是由其他应用程序(如协议处理程序)指定。 实现新的协议处理程序或添加新数据存储时,请使用此方法。 这些规则可由用户规则重写。

 

每个方法都采用一个 URL 到可索引的位置和标志,用于确定是应包含还是排除 URL。 fFollowFlags 参数保留供将来使用。 当您添加新的范围规则并且爬网范围管理器确定该规则(基于 URL 或提供的模式)已存在时,爬网范围管理器会更新工作规则集,以便(1)用新规则替换旧规则,并且(2)删除任何与其相矛盾的用户规则。

提示: 虽然 file:// 根默认包含在爬网范围中,但默认情况下不会为 Program Files 编制索引。 因此,将数据保存到其 Program Files 目录的应用程序需要将其位置添加为默认规则。

有关用户规则的说明

如果新用户规则与现有默认规则相同,则新用户规则将替代工作规则集中的默认规则。 如果新用户规则与现有用户规则相同,则会替换旧用户规则。

设置标志 fOverrideChildren 在工作规则集中具有以下结果:

  • TRUE 导致从工作规则集(用户规则和默认规则)中删除所有子规则。
  • FALSE 会导致将作为新用户规则子级的所有默认规则重新添加到当前工作规则集中。 如果子默认规则是包含规则,并且新用户规则是排除规则,则默认规则将更改为包含用户规则。

 

删除范围规则

可以使用 ISearchCrawlScopeManager 接口从工作规则集中删除范围规则。 此接口提供以下两种方法来删除范围规则。

方法 Description
RemoveScopeRule 从工作规则集中删除指定 URL 的用户规则。 如果用户规则是默认规则的副本或替代默认规则,则默认规则将保留在工作规则集中。
RemoveDefaultScopeRule 从工作规则集和默认规则集中删除指定 URL 的默认规则。 调用此方法后,无法使用 RevertToDefaultScopes 还原到此默认规则。

 

每个方法采用一个 URL 和一个标志,指示要删除的规则是包含规则还是排除规则。 如果未找到具有该 URL 和包含/排除标志的规则,则这些方法将返回错误。

提示: 如果要完全从爬网范围中删除范围,请使用 RemoveRoot 方法,该方法删除搜索根和所有关联的范围规则。 例如,卸载时执行此作被认为是最佳做法。

还可以删除搜索根的所有用户集替代,并还原到原始搜索根和默认范围规则。 有关详细信息,请参阅下一部分。

注释

在 Windows Vista 中,如果用户通过控制面板的用户配置文件被删除,CSM 将删除所有包含其 SID 的规则和根目录,同时从目录中清除其索引项。 在 Windows XP 上,必须手动删除用户的根和规则。

 

 

还原为默认规则

还原为默认规则会删除 URL 或根的所有用户规则,并将所有默认规则还原到工作规则集。 但是,它不会删除组策略设置的规则。 RevertToDefaultScopes 方法不采用任何参数,如果无法还原为默认规则,则返回错误代码。

 

枚举范围规则

CSM 通过标准 COM 样式的枚举接口 IEnumSearchScopeRules 来枚举范围规则。 可以使用此接口来枚举范围规则以供多种用途使用。 例如,你可能想要在用户界面中显示整个工作规则集,或者确定某个规则或子规则是否已包含在抓取范围内。

 

跟踪范围规则

CSM 还允许你确定指定的 URL 是否包含在爬网范围以及它是否具有父范围或子范围规则。 您还可以了解为什么 URL 会被包含在抓取范围中或被排除在外。 这些方法不是打算用于 URL 模式的。

下表介绍了用于添加新范围规则的 ISearchCrawlScopeManager 的方法。

方法 Description
GetParentScopeVersionId 获取父包含 URL 的版本 ID。 可以使用此方法查看自上次检查父范围以来是否发生了更改。
示例:如果邮件应用程序使用由提供商管理的通知,它可能会在关闭之前获取父作用域版本,并在打开时再次检查版本。 然后,应用程序可以确定是否需要将一组新通知推送到索引器。
HasChildScopeRule 如果指定的 URL 具有子规则(应用于其 URL 层次结构中的任何级别的子级的规则),则返回 TRUE
示例:如果 URL 为 file:///C:\Folder\,则如果 CSM 具有专门针对 file:///C:\Folder\Subfolder\的范围规则,则此方法返回 TRUE
HasParentScopeRule 如果指定的 URL 具有父规则(应用于 URL 层次结构中任意级别的父级的规则),则返回 TRUE
示例:如果 URL 为 file:///C:\Folder\Subfolder,则如果 CSM 具有专门用于 file:///C:\Folder\的范围规则,则此方法返回 TRUE
IncludedInCrawlScope 如果爬网范围中包含指定的 URL,则返回 TRUE
IncludedInCrawlScopeEx CLUSION_REASON 枚举中返回一个值,说明 URL 为何包含在爬网范围中或从爬网范围中排除,并检索值 TRUE (如果 URL 包含在爬网范围中)。 此方法可帮助您识别工作规则集中的冲突。

 

 

注释

IncludedInCrawlScopeIncludedInCrawlScopeEx 方法确定 URL 是否仅依靠 CSM 中的规则进行抓取。 可能会有其他原因导致 URL 未被爬网,例如 FANCI 位已设置(即,用户在该文件夹的属性对话框中不允许快速编制索引)。

 

如果您认为应该排除某个文件路径,但它被列为包含路径,请确保排除规则以“<path>\*”结尾。 如果您认为某个文件或文件路径应被包含但实际上没有,请务必检查该文件或路径的 FANCI 位设置。 为此,可以右键单击文件或文件路径并选择 “属性”,然后确保“ 快速搜索”允许索引服务为此文件夹设置索引 复选框。 如果未在此处标记文件或文件路径进行索引,则即使文件路径位于包含规则中,也不会对其进行索引。

引用

ISearchCrawlScopeManager

ISearchCrawlScopeManager2

ISearchScopeRule

IEnumSearchScopeRules

概念

管理搜索根