管理搜索根
使用爬网范围管理器 (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) 接口之前,必须执行以下先决条件步骤:
- 创建 CrawlSearchManager 对象并获取其 ISearchManager 接口。
- 为“SystemIndex”调用 ISearchManager::GetCatalog 以获取 ISearchCatalogManager 接口的实例。
- 调用 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 方法;Windows搜索当前不使用接口的其他 put 方法。 建议在所有根中包括用户的安全标识符 (SID) ,以提高安全性。 每个用户根更安全,因为查询在每用户进程中运行,确保一个用户看不到从其他用户收件箱编制索引的项目,例如。
方法 | 说明 |
---|---|
put_ProvidesNotifications | 如果协议处理程序或其他应用程序将通知搜索引擎对搜索根下的 URL 所做的更改,则设置为 TRUE 。 通知指示 URL 需要重新编制索引。 |
put_RootURL | 设置当前搜索的根 URL。 URL 采用前面所述的搜索根表单。 |
默认情况下,添加搜索根时,索引器不会对范围进行爬网。 还必须为根添加包含规则。 如果要为应用程序添加用户特定的根目录,应用程序应在应用程序启动时为新用户添加相应的根。
若要为新用户添加适当的根,请执行以下操作:
- 获取用户的 SID。
- 枚举所有根以检查是否存在此 SID。
- 如有必要,使用 SID 添加新根。
从爬网范围中删除根
如果不再需要索引该 URL,可以使用 ISearchCrawlScopeManager 从爬网范围中删除根目录。 删除根还会删除该 URL 的所有范围规则。 例如,假设你想要从系统卸载内容存储和/或其协议处理程序。 可以卸载应用程序,删除所有数据,然后从爬网范围中删除搜索根目录,爬网范围管理器将删除与根关联的根和所有范围规则。
若要删除现有搜索根,请使用要删除的搜索根调用 ISearchCrawlScopeManager::RemoveRoot 。 搜索根 URL 采用与前面所述的搜索根相同的格式。 如果未找到根,此方法将返回S_FALSE,如果存在删除找到根的错误,则返回错误代码。
删除搜索根还会从用户界面中删除用于Windows搜索选项的 URL,因此用户可能无法使用用户界面重新添加该容器或位置。 还可以删除搜索根的所有用户集替代,并还原到原始搜索根和范围规则。 有关详细信息,请参阅 管理范围规则。
注意
在 Windows Vista 上,如果用户通过控制面板中的用户配置文件删除,CSM 会删除其 SID 的所有规则和根,并从目录中删除其索引项。 在 Windows XP 上,需要手动删除用户的根和规则。
枚举爬网范围中的根
CSM 使用标准 COM 样式枚举器接口 IEnumSearchRoots 枚举搜索根。 可以使用此接口枚举搜索根以用于多种用途。 例如,你可能想要在用户界面中显示整个爬网范围,或者发现某个根的特定根或根子级是否已在爬网范围内。
相关主题