ISearchCatalogManager 和 ISearchCatalogManager2 接口提供了管理搜索目录的方法,例如导致重新编制索引或设置超时。 虽然 Windows 搜索目前只使用一个目录,但此界面旨在让你更好地控制独立管理多个目录。 该接口通过以下方式管理目录:
- 访问其他接口 - 检索爬网范围管理器所需的其他搜索相关接口、数据更改通知和 ISearchQueryHelper 接口。
- 目录内容 - 确保为新数据编制索引,并且其他应用程序和组件通过强制重新索引目录或重置整个目录来正常工作。
- 目录属性 - 设置属性,用于确定目录在连接到协议处理程序时如何管理超时,以及如何在搜索中处理音调标记。
- 目录状态 - 获取有关目录的信息,包括状态、大小和当前活动状态。
本主题按如下所示进行组织:
访问相关接口
Windows 搜索平台中的一些有用接口需要目录管理器的实例才能使用。 若要为指定的目录创建目录管理器,请调用 ISearchManager::GetCatalog 方法。 然后,可以使用目录管理器的方法实例化和返回基于指定目录的接口。
| 方法 | Description |
|---|---|
| GetQueryHelper | 获取当前目录的 ISearchQueryHelper 接口的实例,使你能够轻松生成查询。 |
| GetCrawlScopeManager | 获取此搜索目录的 ISearchCrawlScopeManager 实例,使开发人员能够修改 Windows 搜索索引器的爬网范围。 |
| GetItemsChangedSink | 获取 ISearchItemsChangedSink 接口的实例,当客户端希望索引有关项的状态信息以支持提供程序管理的通知时,客户端应用程序将更改通知给索引器。 有关详细信息 ,请参阅通知更改索引 。 |
| GetPersistentItemsChangedSink | 获取 ISearchPersistentItemsChangedSink 的实例,客户端应用程序在客户端不希望索引状态信息(索引器管理的通知)时通知索引器更改。 有关详细信息 ,请参阅通知更改索引 。 |
管理目录内容
管理目录涉及两个主要任务:重新为索引器爬网范围中的所有或部分 URL 编制索引,并重置整个基础目录。 重新为 URL 编制索引时,旧数据将保留在目录中,除非新数据被替换。 重置目录时,将重新生成整个目录,并重新为爬网范围中的所有 URL 编制索引。 此过程可能需要很多时间,并且只应用作解决可能损坏的索引等问题的最后手段。
安装新的应用程序、协议处理程序或筛选器时,安装程序应用程序应将其目录或根添加到爬网范围,以确保索引器包含该应用程序数据的位置。 如果在索引器爬网其爬网范围后目录中未显示数据,则应首先确保数据的位置包含在爬网范围中。 可以使用 Windows 搜索选项或 爬网范围管理器的用户界面添加它。 如果位置似乎位于爬网范围中,可以使用 ISearchCatalogManager 接口的以下方法手动强制重新索引索引索引索引器爬网范围或子集中的所有 URL。
| 重新编制索引方法 | Description |
|---|---|
| ISearchCatalogManager::Reindex | 重新为目录中的所有 URL 重新编制索引。 旧信息将一直保留,直到它被新信息替换。 |
|
ISearchCatalogManager::ReindexMatchingURLs ISearchCatalogManager::ReindexSearchRoot |
重新为匹配模式的 URL 编制索引,或从特定根目录开始(例如,file:///C:\Foldername\Subfoldername\)。 这对于重新绘制特定目录或特定扩展中的所有内容非常有用,就像安装应用程序时一样。 |
| PrioritizeMatchingURLs | 指示索引器优先使用与指定模式匹配的 URL 的索引项,以完成其他索引任务。 |
重置索引。 可以通过调用 ISearchCatalogManager::Reset 重置整个索引。 这会通过重新生成数据库并执行爬网范围中所有 URL 的完整索引来重置基础目录。 此过程可能需要很多时间,并且只应用作解决可能损坏的索引等问题的最后手段。
重要
由于这些方法可能导致的索引编制速度放缓,因此在尝试识别索引或目录问题时,应谨慎使用它们。 首先,请确保在爬网范围管理器中添加搜索根和范围规则,然后确保为文件和文件夹正确设置 FANCI 位(文件属性未编制内容索引)。 如果确认这些正确,请尝试先尝试 ReindexSearchRoot,最后尝试重新编制索引。 如果这两项都不起作用,请尝试重置作为最后手段。
有关相关信息,请参阅 通知更改索引,以及 使用 ISearchQueryHelper 查询索引
管理目录状态
目录管理器可用于获取想要自定义目录管理方式的应用程序的目录状态(例如,自定义“目录状态”监视应用程序)。 但大多数与搜索相关的开发方案通常不需要目录管理器。 常见用途是“目录状态”监视应用程序或控制面板样式的应用程序。
下表描述了用于管理目录状态的 ISearchCatalogManager 的方法。
| 方法 | Description |
|---|---|
| URLBeingIndexed | 获取当前正在编制索引的 URL。 如果尝试确定索引器是否在项上“卡住”,此方法将很有用。 |
| NumberOfItems | 获取目录中的项数。 |
| NumberOfItemsToIndex | 检索有关要编制索引的项的以下信息:
|
| GetCatalogStatus | 获取目录的状态,并返回一个提供当前状态的枚举值。 以下是可能的目录状态:
|
| get_Name | 获取 ISearchManager::GetCatalog 方法中指定的当前目录的名称。 目前,唯一支持的目录是 SystemIndex。 |
管理目录属性
可以使用目录管理器管理三个目录属性:
- 音调敏感度。 音调符号是添加到字母中的重音标记,用于表示单词的含义或发音。 此属性确定目录是否对音调符号敏感,并且当你或你的用户以多种语言搜索和索引文本时非常重要。 例如,如果此属性设置为 FALSE,目录会将“resume”和“résumé”视为相同的单词。
- 连接超时。 此属性表示等待来自服务器或数据存储的连接响应的时间量,如 TIMEOUT_INFO 结构所示。 可以使用此属性微调 Windows 搜索。
- 数据超时 此属性表示等待索引器与协议处理程序或筛选器之间的数据事务的时间量,如 TIMEOUT_INFO 结构中所示。 如果此时间已过,将终止来自筛选器守护程序的进程,以防止死锁和其他资源问题。
最后两个属性主要用于将来使用。 其中每个属性都有 get 和 put 方法。
| 方法 | Description |
|---|---|
|
get_DiacriticSensitivity / put_DiacriticSensitivity |
如果目录应区分带音调符号的单词,则为 TRUE。 如果目录应忽略音调符号,则为 FALSE。 更改此属性需要重新生成索引,因为索引的键可能无效。 |
|
get_ConnectTimeout / put_ConnectTimeout |
索引器应等待来自服务器或数据存储的连接响应的时间(以秒为单位)。 如果许多站点无响应,则设置太高可能会导致延迟。 设置太低可能会导致某些网站未爬网。 |
|
get_DataTimeout / put_DataTimeout |
索引器应等待数据事务的时间(以秒为单位)。 |
在提升模式下运行
更新 SystemIndex 的任何方法调用都需要提升应用程序运行。 否则,应用程序将失败并出现“拒绝访问”错误。