管理搜索根

使用爬网范围管理器 (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 告知搜索引擎要爬网和/或watch的容器,以及这些容器下要包括或排除的项目。 若要添加新的搜索根,请实例化 ISearchRoot 对象,设置根属性,然后调用 ISearchCrawlScopeManager::AddRoot 并向其传递指向 ISearchRoot 对象的指针。 搜索根 URL 采用与前面所述的搜索根相同的格式。

下表介绍了 ISearchRoot 的相关 put 方法;Windows 搜索当前不使用 接口的其他 put 方法。 建议在所有根中包括用户的安全标识符 (SID) 以提高安全性。 每用户根更安全,因为查询在每用户进程中运行,确保一个用户看不到从另一个用户的收件箱中编制索引的项目。

方法 说明
put_ProvidesNotifications 如果协议处理程序或其他应用程序将通知搜索引擎有关搜索根下 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

概念性

使用爬网范围管理器

管理范围规则