Windows 搜索概述

Windows Search 是一个桌面搜索平台,提供针对大部分常见的文件类型和数据类型的即时搜索功能,第三方开发人员可以将这些功能扩展到新的文件类型和数据类型。

本主题的组织方式如下:

介绍

Windows Search 是 Windows 7 和 Windows Vista 的标准组件,默认情况下处于启用状态。 Windows Search 取代了 Windows 桌面搜索 (WDS),后者用作 Windows XP 和 Windows Server 2003 的加载项。

Windows Search 由三个组件组成:

Windows Search 服务

WSS 可以组织由一组文档提取出的功能。 通过 Windows Search 协议,客户端可以与托管 WSS 的服务器进行通信,从而在发出查询的同时还支持管理员管理索引服务器。 处理文件时,WSS 会分析一组文档、提取有用的信息,然后整理提取的信息,以便有效地返回这些文档的属性来响应查询。

可查询的文档集合构成目录,目录是 Windows Search 中最高级别的组织单元。 目录表示一组可查询的索引文档。 目录包含一个属性表,表列中存储文本或值以及相应的位置(区域设置)。 该表的每一行对应于目录范围内的一个单独的文档,表的每一列对应于一个属性。 目录可以包含倒排索引(用于快速匹配单词)和属性缓存(用于快速检索属性值)。

实现了索引器进程作为在 LocalSystem 帐户中运行的一项 Windows 服务,并且始终为所有用户运行(即使没有用户登录),从而支持 Windows Search 完成以下操作:

  • 维护一个供所有用户共享的索引。
  • 维护对内容访问的安全限制。
  • 处理来自网络上客户端计算机的远程查询。

搜索服务旨在保护索引时的用户体验和系统性能。 以下情况会导致服务速度减慢或暂停索引:

  • 非搜索相关进程的 CPU 使用率高。
  • 系统 I/O 使用率高,包括文件读取和写入、页面文件和文件缓存 I/O 以及映射的文件 I/O。
  • 内存可用性低。
  • 电池电量低。
  • 存储索引的驱动器上的磁盘空间不足。

开发平台

访问搜索 API 和创建 Windows Search 应用程序的首选方法是通过 Shell 数据源。 Shell 数据源是一个组件,用于扩展 Shell 命名空间并公开数据存储中的项。 数据存储是数据的存储库。 数据存储可以作为使用 Shell 数据源的容器公开给 Shell 编程模型。 数据存储中的项可以由 Windows Search 系统使用协议处理程序编制索引。

例如,ISearchFolderItemFactory 是一个可以创建搜索文件夹数据源实例的组件,该数据源是 Shell 提供的一种“虚拟”数据源,可以对 Shell 命名空间中的其他数据源执行查询并枚举结果。 它可以通过使用索引器或手动枚举和检查指定范围内的项来执行此操作。 你可以在此接口上使用创建和修改搜索文件夹的方法来设置搜索参数。 如果不调用此接口的方法,则会使用默认值。

首选通过 Shell 数据模型间接访问 Windows Search 功能,因为它可以在 Shell 数据模型级别提供对完整 Shell 功能的访问。 例如,可以将搜索的范围设置为库(Windows 7 及更高版本中提供的功能),以使用库文件夹作为查询的范围。 如果这些位置位于不同的索引中(如果文件夹位于不同的计算机上),则 Windows Search 会聚合这些位置的搜索结果。 Shell 数据层还会创建项属性的更完整视图,并综合一些属性值。 它还提供对未由 Windows Search 编制索引的数据存储的搜索功能的访问。 可以通过提供存储系统访问的 Shell 数据源搜索通用串行总线 (USB) 存储设备、使用 MTP 协议的便携式设备或文件传输协议 (FTP) 服务器。 这样做可确保更好的用户体验。

Windows Search 具有属性值的缓存,这些属性值用于实现 Windows Search 服务 (WSS)。 可以使用 Windows Search OLE DB 提供程序或通过 ISearchFolderItemFactory(表示搜索结果中的项和基于查询的视图)以编程方式查询这些属性值。 然后,在为 Word 文档等项编制索引时,Windows Search 会收集并存储由筛选处理程序或属性处理程序发出的属性。 重新生成索引时,此存储将被放弃并重新生成。

第三方开发人员可以创建通过编程查询使用索引中数据的应用程序,并且可以扩展自定义文件和项类型的索引中的数据,以便 Windows Search 编制索引。 如果希望查询结果显示在 Windows 资源管理器中,必须先实现 Shell 数据源,然后才能创建协议处理程序来扩展索引。 但是,如果所有查询都采用编程方式(例如通过 OLE DB),并由应用程序的代码而不是 Shell 来解释,那么 Shell 命名空间仍然是首选,但不强制要求。

Windows 需要协议处理程序才能获取有关文件内容的信息,例如数据库或自定义文件类型中的项。 虽然 Windows Search 可以为文件的名称和属性编制索引,但 Windows 没有有关文件内容的信息。 因此,无法在 Windows Shell 中为此类项编制索引或将其公开。 通过实现自定义协议处理程序,可以公开这些项。 有关由尝试实现的开发人员场景标识的处理程序列表,请参阅 Windows Search 作为开发平台中的“处理程序概述”。

注意

Shell 数据源有时称为 Shell 命名空间扩展。 处理程序有时称为 Shell 扩展或 Shell 扩展处理程序。

 

用户界面

在 Windows Vista 及更高版本中,Windows Search 已集成到所有 Windows 资源管理器窗口中,以便即时访问搜索。 这使用户能够按文件名、属性和全文内容快速搜索文件和项。 还可以进一步筛选结果以优化搜索。 以下是 Windows Search 的更多功能:

  • 每个窗口中的即时搜索框可即时筛选当前视图中的所有项。 即时搜索框显示在“开始”菜单中以搜索程序或文件,并显示在所有 Windows 资源管理器窗口的右上角以筛选显示的结果。 即时搜索还集成到其他一些 Windows 功能(例如 Windows 媒体播放器)中,用于查找相关文件。
  • 可以使用关键字标记文档,按用户定义的自定义条件对文档进行分组。 标记是由用户或应用程序分配的元数据项,以便更容易地根据项名称或内容中可能没有的关键字查找文件。 例如,一组图片可能标记为“Arizona Vacation 2009”,以便稍后通过搜索任何包含的单词来快速检索。
  • 通过 Windows 资源管理器视图中增强的列标题,可以用不同的方式对文档进行排序和分组。 例如,可以根据名称、修改日期、类型、大小和标记对文件进行排序。 还可以根据其中的任何属性对文档进行分组,并且可以根据需要筛选每个组(隐藏或显示)。
  • 文档可以按名称、修改日期、类型、大小和标记进行堆叠。 堆叠包括具有指定属性并且位于所选文件夹的任何子文件夹内的所有文档。
  • 可以通过单击 Windows 资源管理器搜索窗格中的“保存搜索”按钮来保存搜索(以便稍后检索)。 打开保存的搜索时,将根据原始条件动态重新填充结果。 有关说明,请参阅保存搜索结果
  • 借助预览控件和缩略图控件,用户可以在 Windows 资源管理器中预览文档,而无需打开创建文档的应用程序。

技术先决条件

在开始阅读 Windows Search SDK 文档之前,应基本了解以下概念:

  • 如何实现 Shell 数据源。
  • 如何实现处理程序。
  • 如何使用本机代码。

Shell 数据源是一个组件,用于扩展 Shell 命名空间并公开数据存储中的项。 过去,Shell 数据源称为 Shell 命名空间扩展。 处理程序是一个组件对象模型 (COM) 对象,为 Shell 项提供功能。 有关由尝试实现的开发人员场景标识的处理程序列表,请参阅 Windows Search 作为开发平台中的“处理程序概述”。

有关用于处理 Windows Search 和其他使用托管代码的程序公开的 COM 对象的 Windows Search SDK 互操作性程序集的详细信息,请参阅将托管代码与 Shell 数据和 Windows Search 一起使用。 但请注意,筛选器、属性处理程序和协议处理程序必采用本机代码编写。 这是因为运行多个加载项的进程存在潜在的公共语言运行时 (CLR) 版本控制问题。 不熟悉 C++ 的开发人员可以从 Visual C++ 开发人员中心Windows 开发入门开始。

SDK 下载和内容

除了满足列出的技术先决条件之外,还必须下载 Windows SDK 以获取 Windows Search 库。 Windows Search 代码示例包含有用的代码示例和用于使用托管代码进行开发的互操作性程序集。

Windows Search SDK 文档

Windows Search SDK 文档的内容如下所示:

Windows Search 取代了 Windows 桌面搜索 (WDS),后者用作 Windows XP 和 Windows Server 2003 的加载项。 WDS 取代了旧版 Windows 中的旧索引服务,增强了性能、可用性和可扩展性。 新的开发平台支持生成更安全、更稳定的系统的要求。 虽然新的查询平台与 Microsoft Windows 桌面搜索 (WDS) 2.x 不兼容,但可以更新为早期版本的 WDS 编写的筛选器和协议处理程序,与 Windows Search 一起使用。 Windows Search 还支持新的属性系统。 有关筛选器、属性处理程序和协议处理程序的信息,请参阅扩展索引

Windows Search 内置于 Windows Vista 及更高版本中,并作为 WDS 2.x 的可再发行更新提供,以支持以下操作系统:

  • 带 Service Pack 2 (SP2) 的 Windows XP 的 32 位版本。
  • 所有 Windows XP 基于 x64 的版本。
  • 带 Service Pack 1 (SP1) 的 Windows Server 2003 及更高版本。
  • 所有 Windows Server 2003 的基于 x64 的版本

运行这些操作系统的系统必须安装 Windows Search 才能运行为 Windows Search 编写的应用程序。

其他资源

Windows Search 作为开发平台

Windows Search 支持的语言

将托管代码与 Shell 数据和 Windows 搜索一起使用