Windows に付属するフィルター ハンドラー

Microsoft では、Windows Search を使用していくつかの標準フィルターを提供しています。 クライアントは、これらのフィルター ハンドラー ( IFilter インターフェイスの実装) を呼び出して、ドキュメントからテキストとプロパティを抽出します。

このトピックは次のように整理されています。

Windows Search の実装に関する注意事項

Windows 7 以降では、マネージド コードで記述されたフィルターは明示的にブロックされます。 複数のアドインが実行されるプロセスで CLR のバージョン管理に関する問題が発生する可能性があるため、フィルターはネイティブ コードで記述する必要があります。

Windows 7 と 10 の実装

Windows 7 以降では、フィルター ハンドラー、プロパティ ハンドラー、または新しい拡張機能を登録するときに発生する新しい動作があります。 新しいプロパティ ハンドラーやフィルター ハンドラーがインストールされると、対応する拡張子を持つファイルのインデックスが自動的に再作成されます。

Windows 7 以降では、対応するプロパティ ハンドラーと組み合わせてフィルター ハンドラーをインストールし、プロパティ ハンドラーの前にフィルター ハンドラーを登録することをお勧めします。 プロパティ ハンドラーの登録により、最初に再起動を必要とせずに、以前にインデックスが作成されたファイルのインデックスの再作成がすぐに開始され、以前に登録されたフィルター ハンドラーを利用してコンテンツ インデックス作成を行います。

対応するプロパティ ハンドラーなしでフィルター ハンドラーのみがインストールされている場合は、インデックス作成サービスの再起動後、またはシステムの再起動後に自動インデックスの再作成が行われます。

Windows 7 に固有のプロパティの説明フラグについては、 GETPROPERTYSTOREFLAGSPROPDESC_COLUMNINDEX_TYPEPROPDESC_SEARCHINFO_FLAGSのリファレンス トピックを参照してください。

Windows Vista の実装

Windows Vista 以前では、 IFilter またはプロパティ ハンドラーをインストールしても、独立系ソフトウェア ベンダー (ISV) が一致する URL の再構築またはインデックス再作成を明示的に呼び出さない限り、既存のアイテムのインデックス再作成は開始されません。

Indexing Service などのレガシ アプリケーションと、フィルターを実装するときに注意する必要がある Windows Search などの新しいアプリケーションには、2 つの大きな違いがあります。

まず、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 デスクトップ検索 (WDS) 2.x には存在しません。 フィルターで上記のように他のアプリケーションをサポートする必要がある場合は、コンテンツとプロパティの両方を処理する必要がある場合があります。

互換性のあるフィルターの開発の詳細については、 IFilter (レガシ アプリケーションの場合)、および フィルター アドインの開発 (レガシ アプリケーションの場合) に関するトピックを参照してください。

Windows 検索フィルター

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)) の値に自動的にマップされるため、これらのプロパティに対するクエリではマップされた内容が検索されます。 いくつかの例を次の表に示します。 ファイル形式に使用できるシステム プロパティの一覧については、「カスタム ファイル形式の システム定義プロパティ」を参照してください。

プロパティの例 マップ先
meta name="author" content="ruth" Summary Information プロパティ セットの author プロパティ。
meta name="subject" content="ワープロ" Summary Information プロパティ セットの subject プロパティ。
meta name="keywords" content="fonts, serif" [概要情報] プロパティ セットの キーワード (keyword) プロパティ。
meta name="ms.category" content="fiction" ドキュメントの [概要情報] プロパティ セットの category プロパティ。

HTML IFilter の一部の機能を次の表に示します。

タスク アクション
ファイルから特別な抽象を作成する タグをMETA NAME="DESCRIPTION"...使用して、キーワード (keyword)に続く文字列をCONTENTドキュメント抽象として使用するように IFilter に指示します。

注:
フィルター処理プロセスでは、フィルター処理された各ファイルに対して抽象を生成できます。既定では、ファイルの先頭に一連の文字が含まれます。


<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 Search では、システム プロパティ (ファイル名など) とファイルの内容の両方をフィルター処理するテキスト フィルター ハンドラーが使用されます。 ファイルの種類に レジストリに IFilter 関連付けがない場合、Windows Search ではファイルのシェル プロパティのみがインデックス化されます。 ただし、ユーザーは[インデックス作成オプション] コントロール パネルの [詳細オプション] を使用して、[インデックスのプロパティ] または [インデックスのプロパティ] と [ファイル の内容] に移動できます。

[詳細オプション] ダイアログ ボックスを示すスクリーン ショット

ユーザーが IFilter が関連付けられていないファイルの種類に対してこのオプションを選択した場合、テキスト フィルター ハンドラーを使用してファイルの内容が抽出されます。 テキスト フィルター ハンドラーは、ドキュメント形式を "理解" しません。ファイルの内容をフィルター処理すると、ファイルは一連の文字として扱われます。 ファイルの先頭にある Unicode バイト順マークのチェック。

バイナリまたは Null フィルター ハンドラー

登録済みのバイナリ ファイルが検出されると、null フィルター ハンドラーが使用されます。 null フィルター ハンドラーは、システム プロパティのみを取得します。 バイナリ ファイルの内容はフィルター処理されません。 システム プロパティの例としては、 FileNameLastWriteTimeFileSizeAttributes があります

その他のリソース

フィルター ハンドラーの開発

Windows Search のフィルター ハンドラーについて

Windows Search でフィルター ハンドラーを作成するためのベスト プラクティス

フィルター ハンドラーからプロパティを返す

Windows Search でのフィルター ハンドラーの実装

フィルター ハンドラーの登録

フィルター ハンドラーのテスト