Microsoft では、Windows Search を使用していくつかの標準フィルターを提供しています。 クライアントは、これらのフィルター ハンドラー ( IFilter インターフェイスの実装) を呼び出して、ドキュメントからテキストとプロパティを抽出します。
このトピックは次のように構成されています。
Windows Search の実装に関する注意事項
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 の再構築またはインデックス再作成を明示的に呼び出さない限り、既存の項目のインデックス再作成は開始されません。
Indexing Service などのレガシ アプリケーションと、フィルターを実装する際に注意する必要がある Windows Search などの新しいアプリケーションには、次の 2 つの大きな違いがあります。
- IPersistStream インターフェイスの使用。
- プロパティ ハンドラーの使用。
まず、Windows Vista および Windows Search 3.0 以降では、次の理由で IPersistStream を使用する必要があります。
- パフォーマンスと将来の互換性を確保するため。
- セキュリティの強化に役立ちます。 IPersistStream で実装されたフィルターは、フィルターを実行するコンテキストにディスク上またはネットワーク経由でファイルを開く権限が必要ないため、より安全です。
Windows Search では IPersistStream のみを使用しますが、下位互換性のために フィルターに IPersistFile インターフェイス や IPersistStorage インターフェイス の実装を含めることもできます。
2 つ目の大きな違いは、Windows Vista と Windows Search 3.0 以降に、プロパティ ハンドラーを使用して項目のプロパティを列挙する新しいプロパティ システム がある点です。
ただし、次の目的でコンテンツとプロパティの両方を処理するフィルターを実装する必要がある場合があります。
- 従来の MSSearch 実装をサポートします。
- リンクを走査します。
- 言語情報を保持します。
- 埋め込みアイテムを再帰的にフィルター処理します。
このような状況では、プロパティ値にアクセスするための IFilter::GetValue メソッドを含む完全なフィルター実装が必要です。
従来の実装
前述のように、Windows Vista と Windows Search には、アイテムのコンテンツとは別のアイテムのプロパティをカプセル化する新しいプロパティ システムが含まれています。 このプロパティ システムは、以前のバージョンの Microsoft Windows Desktop Search (WDS) 2.x には存在しません。 前述のようにフィルターで他のアプリケーションをサポートする必要がある場合は、コンテンツとプロパティの両方を処理することが必要になる場合があります。
互換性のあるフィルターの開発の詳細については、次のトピック、 IFilter (レガシ アプリケーション用)、および フィルター アドインの開発 (レガシ アプリケーションの場合) を参照してください。
Windows Search フィルター
Microsoft では、Windows Search を使用していくつかの標準フィルターを提供しています。 IFilter DLL の内容を次の表にまとめます。 フィルター ハンドラーの名前をクリックすると、その IFilter 実装の説明が表示されます。
| フィルター ハンドラー | フィルター処理されたファイル | IFilter DLL |
|---|---|---|
| MIME フィルター ハンドラー | 多目的インターネット メール拡張機能 (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) は、Windows Search でインデックスを作成できるように、クラス "htmlfiles" からテキストとプロパティ情報を抽出します。 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" | Summary Information プロパティ セットの author プロパティ。 |
| meta name="subject" content="ワープロ" | 概要情報プロパティ セットの subject プロパティ。 |
| meta name="keywords" content="fonts, serif" | Summary Information プロパティ セットのキーワード プロパティ。 |
| meta name="ms.category" content="fiction" | ドキュメントの概要情報プロパティ セットの category プロパティ。 |
HTML IFilter の一部の機能を次の表に示します。
| Task | アクション | Example | |
|---|---|---|---|
| ファイルから特別な抽象を作成する |
META NAME="DESCRIPTION"... タグを使用して、CONTENT キーワードに続く文字列をドキュメントの要約として使用するように IFilter に指示します。
Note: |
|
|
| 個々のファイルがフィルター処理されないようにする |
meta name タグをファイルに追加します。 |
|
|
| ファイルの言語コードを設定する (システムが正しい言語ワード ブレーカーとノイズ ワード ファイルを選択するようにするため) | 次の meta name タグをファイルに追加します。ここで、コンテンツ フィールドは適切な言語コード (文字またはロケール値を使用) を指定します。 |
|
ドキュメント フィルター ハンドラー
ドキュメント フィルター ハンドラー (offilt.dll) は、Microsoft Office のドキュメントの一部の拡張機能のファイルをフィルター処理します。 これには、拡張子が.doc、.mdb、.ppt、.xlt などのファイルが含まれます。
プレーン テキスト フィルター ハンドラー
プレーンテキスト ファイルの場合、Windows Search では、システム プロパティ (ファイル名など) とファイルの内容の両方をフィルター処理するテキスト フィルター ハンドラーが使用されます。 ファイルの種類に IFilter の関連付けがレジストリにない場合、Windows Search はファイルのシェル プロパティのみをインデックス化します。 ただし、ユーザーは、[インデックス作成オプション] コントロール パネルの [詳細オプション] を使用して、[インデックスのプロパティ] または [インデックスのプロパティ] と [ファイルの内容] を使用できます。
ユーザーが IFilter が関連付けられていないファイルの種類に対してこのオプションを選択した場合、テキスト フィルター ハンドラーを使用してファイルの内容が抽出されます。 テキスト フィルター ハンドラーは、ドキュメント形式を "理解" しません。ファイルの内容をフィルター処理すると、ファイルは一連の文字として扱われます。 ファイルの先頭に Unicode のバイトオーダー マークがあるかどうかを確認します。
バイナリまたは null フィルター ハンドラー
登録済みのバイナリ ファイルが検出されると、null フィルター ハンドラーが使用されます。 null フィルター ハンドラーは、システム プロパティのみを取得します。 バイナリ ファイルの内容はフィルター処理されません。 システム プロパティの例としては、 FileName、 LastWriteTime、 FileSize、 属性があります。
その他のリソース
- GitHub で入手できる IFilterSample コード サンプルでは、IFilter インターフェイスを実装するための IFilter 基本クラスを作成する方法を示します。
- インデックス作成プロセスの概要については、「 インデックス作成プロセス」を参照してください。
- ファイルの種類の概要については、「ファイルの種類 」を参照してください。
- ファイルの種類のファイル関連付け属性を照会するには、「 PerceivedTypes、SystemFileAssociations、およびアプリケーションの登録」を参照してください。
関連トピック
Windows Search のフィルター ハンドラーについて
Windows Search でフィルター ハンドラーを作成するためのベスト プラクティス