属性是从使用已注册属性处理程序的项中提取的,或使用为特定文件类型注册的筛选器。 筛选器处理程序( IFilter 接口的实现)可以通过多种方式解释文件类型的内容。
本主题按如下所示进行组织:
属性筛选
下表列出了属性筛选的最佳做法。
| 方法 | Description |
|---|---|
| IFilter::Init | 返回 IFILTER_FLAGS 枚举。 如果此枚举 IFILTER_FLAGS_OLE_PROPERTIES 成员设置为一个,则 Windows 搜索将使用 IPropertySetStorage 和 IPropertyStorage 接口接口来枚举和访问外部值类型属性。 |
| IFilter::GetChunk | 返回文档中包含块类型(文本或值)、名称和区域设置的“区块”信息。 区块包含一个文档属性。 |
| IFilter::GetText | 从区块获取文本类型属性。 |
| IFilter::GetValue | 从区块获取值类型属性。 |
下图显示了一个示例文档。 外部值类型属性 DocTitle (使用 IPropertySetStorage 和 IPropertyStorage 接口的方法获取)和内部值类型属性 Book (由于自定义 IFilter 实现获得)将文档描述为整体。 文本类型属性 Contents 并 Chapter 描述文档的内容。 处理本文档时,筛选器处理程序( IFilter 接口的实现)标识并提取这些属性。
属性大小限制
属性大小存在两个潜在限制:
- Windows 搜索接受每个文件的最大数据大小。
- 属性说明文件中定义的每个属性的最大大小。
目前,Windows 搜索在计算它从项接受的数据量时,不会使用定义的属性大小。 相反,Windows 搜索使用的限制是从注册表读取的文件大小和 MaxGrowFactor (文件大小 N * MaxGrowFactor)的乘积。 默认值 MaxGrowFactor 为 4。
HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Gathering Manager
MaxGrowFactor
因此,如果你的文件类型往往大小较小,但具有较大的属性,Windows 搜索可能不接受要发出的所有属性数据。 但是,你可以增加 MaxGrowFactor 以满足你的需求。
其他资源
- GitHub 上提供的 IFilterSample 代码示例演示如何创建用于实现 IFilter 接口的 IFilter 基类。
- 有关索引过程的概述,请参阅 “索引过程”。
- 有关文件类型的概述,请参阅 文件类型。
- 若要查询文件类型的文件关联属性,请参阅 PerceivedTypes、SystemFileAssociations 和应用程序注册。
- 有关属性和属性处理程序的概述,以及可用于文件格式的系统属性列表,请参阅 开发适用于 Windows 搜索的属性处理程序。