管理范围规则

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

CSM 允许执行以下操作:

  • 向工作规则集添加新的范围规则
  • 删除现有范围规则
  • 枚举默认范围规则
  • 发现特定 URL 是包含在爬网范围内还是排除在爬网范围中,或者具有父级或子范围规则

 

本主题包括以下内容:

关于范围规则

范围规则是一种规则,它包含或排除搜索根目录中的 URL,无法进行爬网和索引。 包含规则会导致索引器在 scrawl 范围中包含该 URL,而排除规则会导致索引器从爬网范围中排除 URL (及其子级) 。

例如,假设你安装了一个新应用程序,其数据文件位于本地计算机上的 WorkteamA\ProjectFiles 文件夹中。 假设你希望 ProjectFiles 文件夹中除子文件夹“原型”中的项之外的所有内容编制索引。 在这种情况下,需要 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 interface.)
  • Windows 搜索或协议处理程序等应用程序的安装或更新
  • 用于添加新数据存储或容器的安装应用程序

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

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

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

 

每种方法都会将 URL 带到可编制索引的位置,并标记用于确定是否应包含或排除 URL。 fFollowFlags 参数保留供将来使用。 当你添加新的范围规则并且爬网范围管理器根据 URL 或 () 提供的模式确定该规则已存在时,将更新工作规则集,使 (1) 旧规则被新规则替换, (2) 任何与之相矛盾的用户规则被删除。

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

用户规则说明

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

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

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

 

删除范围规则

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

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

 

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

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

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

注意

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

 

 

还原到默认规则

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

 

枚举范围规则

CSM 使用标准 COM 样式枚举器接口 IEnumSearchScopeRules 枚举范围规则。 可以使用此接口枚举范围规则,以实现多种目的。 例如,你可能希望在用户界面中显示整个工作规则集,或者发现某个规则或某个规则的子规则是否已在爬网范围内。

 

跟踪范围规则

CSM 还可用于确定指定的 URL 是否包含在爬网范围中,以及它是具有父范围规则还是子范围规则。 还可以了解为何在爬网范围内包括或排除 URL。 这些方法不用于模式 URL。

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

方法 说明
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 为何包含在爬网范围中或从爬网范围中排除,如果 URL 包含在爬网范围中,则检索值 TRUE 。 此方法可帮助你识别工作规则集中的冲突。

 

 

注意

IncludedInCrawlScopeIncludedInCrawlScopeEx 方法确定是否仅基于 CSM 中的规则对 URL 进行爬网。 URL 未爬网可能还有其他原因,例如, (设置 FANCI 位,即用户不允许在文件夹的“属性”对话框中快速编制索引。)

 

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

参考

ISearchCrawlScopeManager

ISearchCrawlScopeManager2

ISearchScopeRule

IEnumSearchScopeRules

概念性

管理搜索根