Microsoft提供了多个带有 Windows 搜索的标准筛选器。 客户端调用这些筛选器处理程序(这些处理程序是 IFilter 接口的实现),以从文档中提取文本和属性。
本主题按如下所示进行组织:
Windows 搜索实现说明
在 Windows 7 及更高版本中,以托管代码编写的筛选器将被显式阻止。 由于运行多个外接程序的进程存在潜在的 CLR 版本控制问题,筛选器必须采用本机代码编写。
Windows 7 和 10 实现
在 Windows 7 及更高版本中,注册筛选器处理程序、属性处理程序或新扩展时会出现新的行为。 安装新的属性处理程序和/或筛选器处理程序时,将自动重新编制具有相应扩展名的文件。
在 Windows 7 及更高版本中,建议将筛选器处理程序与其相应的属性处理程序一起安装,并在属性处理程序之前注册筛选器处理程序。 属性处理程序的注册会立即对以前编制索引的文件重新编制索引,而无需先重启,并利用任何以前注册的筛选器处理程序进行内容索引编制。
如果仅安装筛选器处理程序而不安装相应的属性处理程序,则在重新启动索引服务或重新启动系统后自动重新编制索引。
有关特定于 Windows 7 的属性说明标志,请参阅以下参考主题:GETPROPERTYSTOREFLAGS、PROPDESC_COLUMNINDEX_TYPE 和 PROPDESC_SEARCHINFO_FLAGS。
Windows Vista 实现
在 Windows Vista 及更早版本中,除非独立软件供应商(ISV)显式调用匹配 URL 的重新生成或重新索引,否则安装 IFilter 或属性处理程序不会启动现有项的重新索引。
旧应用程序(如索引服务和 Windows 搜索)在实现筛选器时应注意的旧应用程序(如索引服务和较新的应用程序)之间存在两个主要差异:
- 使用 IPersistStream 接口。
- 使用属性处理程序。
首先,Windows Vista 和 Windows 搜索 3.0 及更高版本要求使用 IPersistStream,原因如下:
- 确保性能和将来的兼容性。
- 帮助提高安全性。 使用 IPersistStream 实现的筛选器更安全,因为运行筛选器的上下文不需要权限打开磁盘或网络上的文件。
虽然 Windows 搜索仅使用 IPersistStream,但你也可以在筛选器中包含 IPersistFile 接口 和/或 IPersistStorage 接口 实现以实现向后兼容性。
第二个主要区别是 Windows Vista 和 Windows Search 3.0 及更高版本具有新的 属性系统,该系统使用属性处理程序来枚举项的属性。
但是,有时需要实现处理内容和属性的筛选器,以便:
- 支持旧版 MSSearch 实现。
- 遍历链接。
- 保留语言信息。
- 以递归方式筛选嵌入项。
在这些情况下,需要完整的筛选器实现,包括 IFilter::GetValue 方法来访问属性值。
旧版实现
如前所述,Windows Vista 和 Windows 搜索包括一个新的属性系统,用于封装项的属性,该属性独立于项的内容。 Microsoft Windows 桌面搜索 (WDS) 2.x 的早期版本中不存在此属性系统。 如果筛选器必须支持上述其他应用程序,则可能需要同时处理内容和属性。
有关开发兼容筛选器的详细信息,请参阅以下主题、IFilter(适用于旧版应用程序),以及 开发筛选器加载项(适用于旧版应用程序)。
Windows 搜索筛选器
Microsoft提供了多个带有 Windows 搜索的标准筛选器。 下表汇总了 IFilter DLL 内容。 单击筛选器处理程序的名称将转到该 IFilter 实现的说明。
| 筛选器处理程序 | 筛选的文件 | IFilter DLL |
|---|---|---|
| MIME 筛选器处理程序 | 多用途 Internet 邮件扩展 (MIME) | mimefilt.dll |
| HTML 筛选器处理程序 | HTML 3.0 或更早版本 | nlhtml.dll |
| 文档筛选器处理程序 | Microsoft Word、Excel、PowerPoint | offfilt.dll |
| 纯文本筛选器处理程序 | 纯文本文件 - 默认 IFilter | query.dll |
| 二进制或 Null 筛选器处理程序 | 二进制文件 - Null IFilter | query.dll |
MIME 筛选器处理程序
MIME 筛选器处理程序(mimefilt.dll)从扩展名为 .eml、.mht 和 .mhtml 的文件中提取文本和属性信息。
HTML 筛选器处理程序
HTML 筛选器处理程序(nlhtml.dll)从类“htmlfiles”中提取文本和属性信息,以便 Windows 搜索可以为其编制索引。 有关 IFilter 与文件类型之间的关联的说明,请参阅 注册筛选器处理程序中的“查找文件的 IFilter DLL”。
可以使用 HTML 文档的 META 标记功能将特殊处理请求传达给 HTML IFilter。
META 标记发生在 HEAD ... /HEAD 标记中 html 文件的开头附近,如以下示例所示。
<head>
<META NAME="DESCRIPTION"
CONTENT="This text appears on the results page as the document's summary.">
</head>
某些 HTML META 标记会自动映射到已知属性集和属性 ID(属性标识符(PID)值,以便对这些属性的查询搜索映射的内容。 下表列出了一些示例。 有关可用于文件格式的系统属性列表,请参阅 System-Defined 自定义文件格式的属性。
| 属性示例 | 映射到 |
|---|---|
| meta name=“author” content=“ruth” | 摘要信息属性集中的 author 属性。 |
| meta name=“subject” content=“word processing” | “摘要信息”属性集中的主题属性。 |
| meta name=“keywords” content=“fonts, serif” | Summary Information 属性集中的关键字属性。 |
| meta name=“ms.category” content=“fiction” | 文档“摘要信息”属性集中的类别属性。 |
下表列出了 HTML IFilter 的某些功能。
| 任务 | 行动 | 例 | |
|---|---|---|---|
| 从文件创建特殊抽象 | 使用 META NAME="DESCRIPTION"... 标记指示 IFilter 将 CONTENT 关键字后面的字符串用作文档抽象。
注意: |
|
|
| 阻止筛选单个文件 | 向文件添加 meta name 标记。 |
|
|
| 设置文件的语言代码(以确保系统选择正确的语言断字符和干扰词文件) | 将以下 meta name 标记添加到文件,其中内容字段指定适当的语言代码(以字符为单位或使用区域设置值)。 |
|
文档筛选器处理程序
文档筛选器处理程序(offilt.dll)筛选Microsoft Office 中文档的某些扩展的文件。 其中包括扩展名.doc、.mdb、.ppt和 .xlt 的文件。
纯文本筛选器处理程序
对于纯文本文件,Windows 搜索使用文本筛选器处理程序,该处理程序同时筛选系统属性(如文件名)和文件的内容。 当文件类型在注册表中没有 IFilter 关联时,Windows 搜索仅为该文件的 Shell 属性编制索引。 但是,用户可以使用 索引选项 控制面板中的 高级选项索引属性 或 索引属性和文件内容。
显示“高级选项”对话框
screen shot showing the advanced options dialog box的屏幕截图
如果用户为没有关联 IFilter的文件类型选择此选项,则文本筛选器处理程序用于提取文件的内容。 文本筛选器处理程序不“理解”任何文档格式;筛选文件的内容时,它会将文件视为字符序列。 它会检查文件开头的 Unicode 字节顺序标记。
二进制或 null 筛选器处理程序
遇到已注册的二进制文件时,将使用 null 筛选器处理程序。 null 筛选器处理程序仅检索系统属性。 不会筛选二进制文件的内容。 系统属性的示例包括 FileName、LastWriteTime、FileSize和 Attributes。
其他资源
- GitHub上提供的 IFilterSample 代码示例演示如何创建用于实现 IFilter 接口的 IFilter 基类。
- 有关索引过程的概述,请参阅 索引过程。
- 有关文件类型的概述,请参阅 文件类型。
- 若要查询文件类型的文件关联属性,请参阅 PerceivedTypes、SystemFileAssociations 和应用程序注册。
相关主题
关于 Windows 搜索 中的筛选器处理程序的
在 Windows 搜索 中创建筛选器处理程序的 最佳做法
在 Windows 搜索 中实现筛选器处理程序