随 Windows 一起交付的筛选器处理程序
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 及更早版本中,安装 IFilter 或属性处理程序不会启动现有项的重新索引编制,除非独立软件供应商 (ISV) 显式调用匹配 URL 的重新生成或重新索引。
在实现筛选器时,应注意旧应用程序(如索引服务)和较新的应用程序(如 Windows 搜索)之间存在两个主要差异:
- 使用 IPersistStream 接口。
- 使用属性处理程序。
首先,Windows Vista 和 Windows Search 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 筛选器处理程序
mimefilt.dll) 中 (MIME 筛选器处理程序从扩展名为 .eml、.mht 和 .mhtml 的文件中提取文本和属性信息。
HTML 筛选器处理程序
nlhtml.dll) 中 (HTML 筛选器处理程序从类“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) ) 值,以便对这些属性的查询将搜索映射的内容。 下表中列出了一些示例。 有关可用于文件格式的系统属性列表,请参阅 自定义文件格式的系统定义属性。
属性示例 | 映射到 |
---|---|
meta name=“author” content=“ruth” | 摘要信息属性集中的 author 属性。 |
meta name=“subject” content=“word processing” | “摘要信息”属性集中的 subject 属性。 |
meta name=“keywords” content=“fonts, serif” | 摘要信息属性集中的 关键字 (keyword) 属性。 |
meta name=“ms.category” content=“fiction” | 文档“摘要信息”属性集中的 category 属性。 |
下表中列出了 HTML IFilter 的某些功能。
任务 | 操作 | 示例 | |
---|---|---|---|
从文件创建特殊摘要 |
META NAME="DESCRIPTION"... 使用 标记指示 IFilter 使用关键字 (keyword) 后面的CONTENT 字符串作为文档摘要。
注意: |
|
|
阻止筛选单个文件 | 向 meta name 文件添加标记。 |
|
|
设置文件的语言代码 (以确保系统选择正确的语言断字符和干扰词文件) | 将以下 meta name 标记添加到文件,其中内容字段指定适当的语言代码 (字符或使用区域设置值) 。 |
|
文档筛选器处理程序
offilt.dll) 中 (文档筛选器处理程序可筛选 Microsoft Office 中某些文档扩展的文件。 例如,其中包括扩展名为 .doc、.mdb、.ppt 和 .xlt 的文件。
纯文本筛选器处理程序
对于纯文本文件,Windows 搜索使用文本筛选器处理程序,该处理程序筛选系统属性 (如文件名) 和文件的内容。 当文件类型在注册表中没有 IFilter 关联时,Windows 搜索仅为该文件的 Shell 属性编制索引。 但是,用户可以使用“索引选项”控制面板中的“高级选项”为“索引属性”或“索引属性”和“文件内容”。
如果用户为没有关联的 IFilter 的文件类型选择此选项,则文本筛选器处理程序用于提取文件的内容。 文本筛选器处理程序不“理解”任何文档格式;筛选文件的内容时,它会将文件视为一系列字符。 它检查文件开头的 Unicode 字节顺序标记。
二进制或 Null 筛选器处理程序
遇到已注册的二进制文件时,将使用 null 筛选器处理程序。 null 筛选器处理程序仅检索系统属性。 不会筛选二进制文件的内容。 系统属性的示例包括 FileName、 LastWriteTime、 FileSize 和 Attributes。
其他资源
- GitHub 上提供的 IFilterSample 代码示例演示如何创建用于实现 IFilter 接口的 IFilter 基类。
- 有关索引过程的概述,请参阅 索引过程。
- 有关文件类型的概述,请参阅 文件类型。
- 若要查询文件类型的文件关联属性,请参阅 PerceivedTypes、SystemFileAssociations 和应用程序注册。