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