随 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 及更早版本中,除非独立软件供应商(ISV)显式调用匹配 URL 的重新生成或重新索引,否则安装 IFilter 或属性处理程序不会启动现有项的重新索引。

旧应用程序(如索引服务和 Windows 搜索)在实现筛选器时应注意的旧应用程序(如索引服务和较新的应用程序)之间存在两个主要差异:

首先,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 关键字后面的字符串用作文档抽象。

注意:
筛选过程可以为每个筛选的文件生成抽象,该文件的开头默认为一组字符。


<head>
  <META NAME="DESCRIPTION" CONTENT="This text will appear on the results page as the document's summary.">
</head>
 
阻止筛选单个文件 向文件添加 meta name 标记。
  <meta name="robots" content="noindex">
设置文件的语言代码(以确保系统选择正确的语言断字符和干扰词文件) 将以下 meta name 标记添加到文件,其中内容字段指定适当的语言代码(以字符为单位或使用区域设置值)。
<meta name="ms.locale" content="EN">
<meta name="ms.locale" content=1033>

文档筛选器处理程序

文档筛选器处理程序(offilt.dll)筛选Microsoft Office 中文档的某些扩展的文件。 其中包括扩展名.doc、.mdb、.ppt和 .xlt 的文件。

纯文本筛选器处理程序

对于纯文本文件,Windows 搜索使用文本筛选器处理程序,该处理程序同时筛选系统属性(如文件名)和文件的内容。 当文件类型在注册表中没有 IFilter 关联时,Windows 搜索仅为该文件的 Shell 属性编制索引。 但是,用户可以使用 索引选项 控制面板中的 高级选项索引属性 或 索引属性和文件内容。

显示“高级选项”对话框screen shot showing the advanced options dialog boxscreen shot showing the advanced options dialog box的屏幕截图

如果用户为没有关联 IFilter的文件类型选择此选项,则文本筛选器处理程序用于提取文件的内容。 文本筛选器处理程序不“理解”任何文档格式;筛选文件的内容时,它会将文件视为字符序列。 它会检查文件开头的 Unicode 字节顺序标记。

二进制或 null 筛选器处理程序

遇到已注册的二进制文件时,将使用 null 筛选器处理程序。 null 筛选器处理程序仅检索系统属性。 不会筛选二进制文件的内容。 系统属性的示例包括 FileName、LastWriteTime、FileSize和 Attributes。

其他资源

开发筛选器处理程序

关于 Windows 搜索 中的筛选器处理程序的

在 Windows 搜索 中创建筛选器处理程序的 最佳做法

从筛选器处理程序返回属性

在 Windows 搜索 中实现筛选器处理程序

注册筛选器处理程序

测试筛选器处理程序