管理搜索根

使用爬网范围管理器(CSM),您可以将数据存储的搜索根添加到 Windows 搜索的爬网范围中或从中移除。

本主题包括以下主题:

 

关于搜索根

搜索根定义 Shell 命名空间的基数,其中可以包括或排除特定作用域,并且通常是可枚举的协议中的最高级别容器。 它不指定此存储的哪些部分应或不应编制索引;它只是指示内容存储存在并与已注册的协议处理程序相关联。 用于标识搜索根 URL 的语法包括协议、存储或用户的安全标识符、路径以及特定项(如文件)。 以下示例显示了搜索根的两种语法形式。

<protocol>://<store or SID>\<path>\[item]
or
<protocol>://<store or SID>/<path>/[item]

<协议>段必须后跟两个(2)正斜杠('/'),除非它是文件:协议,这需要三个斜杠(file:///)。 <网站或 SID> 段表示内容存储区或用户安全标识符(如果搜索根应特定于用户)。 <路径>段是一组容器,如目录或文件夹,可以包含通配符“*”。 <项段>是可选的,也可以包含通配符“*”。 如果不包含项,请确保使用斜杠完成路径段,否则索引器将假定最后一个子容器是项。

例如,假设已实现协议处理程序(myPH)来处理自定义应用程序的类型为 *.myext 的文件。 所有这些文件将位于本地计算机上的 WorkteamA\ProjectFiles 文件夹中。 该搜索根可能如下所示:

  • myPH:///C:\WorkteamA\ProjectFiles\

假设你计划在索引中包含所有 .myext 文件,但不包含该容器中的其他任何文件。 该搜索根目录可能显示如下:

  • myPH:///C:\WorkteamA\ProjectFiles\*.myext。

通配符模式使用通配符“*”定义 URL,被视为模式而不是 URL,但术语通常可互换使用。 例如,file:///C:\ProjectA\*\data\ 将匹配以下 URL:

  • C:\ProjectA\version1\data\
  • C:\ProjectA\version2\data\

但该模式与以下 URL 不匹配:

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

应为索引器的爬网范围中尚不存在的容器创建新的搜索根。 如果爬网范围中已包含路径 C:\ParentScope,则无需为 C:\ParentScope\ChildScope 添加新的搜索根目录,除非你知道以前排除了子范围。

用于设置 Windows 搜索选项的用户界面向用户显示搜索根,以便他们可以优化搜索的范围规则。 作为自定义协议处理程序、容器和/或应用程序的安装过程的一部分,可以定义默认爬网范围,其中包含和排除规则。 这些规则以位置的形式提供给最终用户。 用户可以在预定义的搜索根目录的子目录中进行导航,选择要包括在搜索中的子目录,或者清除那些他们想排除在搜索之外的目录。

 

在您开始之前

在使用任何爬网范围管理器(CSM)接口之前,必须执行以下前提步骤:

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

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

 

Windows 7:新的爬网范围管理器 API

Windows 7 及更高版本中ISearchCrawlScopeManager2 扩展 了 ISearchCrawlScopeManager 接口的功能。 ISearchCrawlScopeManager2::GetVersion 方法获取爬网范围管理器 (CSM) 版本,这会通知客户端 CSM 的状态是否已更改。 ISearchCrawlScopeManager2::GetVersion 不会导致跨进程调用。 如果函数成功,则返回的指针将保持有效,直到客户端在指针上调用 UnmapViewOfFile ,并在返回的句柄上 调用 CloseHandle

 

将根目录添加至爬网范围

ISearchCrawlScopeManager 告知搜索引擎要爬网和/或监视的容器,以及要包括或排除这些容器下的项目。 若要添加新的搜索根,请实例化 ISearchRoot 对象,设置根属性,然后调用 ISearchCrawlScopeManager::AddRoot 并将其传递给 ISearchRoot 对象的指针。 搜索根 URL 采用与前面所述的搜索根相同的形式。

下表描述了 ISearchRoot 的相关 put 方法;接口的其他 put 方法当前未由 Windows 搜索使用。 我们建议在所有根中包含用户的安全标识符(SID),以提高安全性。 每用户权限更安全,因为查询在每个用户的独立进程中运行,确保一个用户无法查看从其他用户收件箱中编制索引的项目。

方法 Description
设置提供通知 如果协议处理程序或其他应用程序将通知搜索引擎对搜索根下的 URL 的更改,则设置为 TRUE 。 通知指示 URL 需要重新编制索引。
put_RootURL 设置当前搜索的根 URL。 URL 采用前面所述的搜索根表单。

 

 

默认情况下,添加搜索根时,索引器不会对范围进行爬网。 还必须为根添加包含规则。 如果要为应用程序添加特定于用户的根,该应用程序应在应用程序启动时为新用户添加适当的根。

若要为新用户添加适当的根:

  1. 获取用户的 SID。
  2. 枚举所有根以检查是否存在此 SID。
  3. 使用 SID(如有必要)添加新根。

 

从抓取范围中删除根节点

不再需要为该 URL 编制索引时,可以使用 ISearchCrawlScopeManager 从爬网范围中删除根目录。 删除根也会删除该 URL 的所有范围规则。 例如,假设你想要从系统卸载内容存储和/或其协议处理程序。 可以卸载应用程序,删除所有数据,然后从爬网范围中移除搜索根目录,爬网范围管理器会移除该搜索根目录以及与之关联的所有范围规则。

若要删除现有搜索根,请使用要删除的搜索根调用 ISearchCrawlScopeManager::RemoveRoot 。 搜索根 URL 采用与前面所述的搜索根相同的形式。 如果未找到根目录,则此方法返回S_FALSE,如果删除找到的根存在错误,则返回错误代码。

删除搜索根还会从 Windows 搜索选项的用户界面中删除 URL,因此用户可能无法使用用户界面重新添加该容器或位置。 还可以删除所有用户设置的搜索根覆盖,并还原到原始的搜索根和范围规则。 有关详细信息,请参阅 “管理范围规则”。

注释

在 Windows Vista 上,如果用户通过“控制面板”的“用户配置文件”被移除,CSM 将删除与其 SID 相关的所有规则和根目录,并从目录中移除其所有索引项。 在 Windows XP 上,需要手动删除用户的根和规则。

 

 

枚举爬网范围中的根

CSM 使用标准 COM 样式枚举器接口 IEnumSearchRoots 枚举搜索根。 可以使用此接口枚举搜索根以用于多种目的。 例如,你可能想要在用户界面中显示整个爬网范围,或者发现某个根的特定根或子级是否已在爬网范围内。

 

引用

ISearchCrawlScopeManager

ISearchRoot

IEnumSearchRoots

概念

使用爬网范围管理器

管理范围规则