Windows デスクトップ検索

多くのフィードバックのポイントの 1 つとして、サービスを無効化し必要に応じてコンポーネントをインストールする、ということがありました ― この分野での私たちの目標については、以前のポストに書きました。この種のコントロールに対する必要性の要因はさまざまありますが、キーとなる要因は、さまざまなプラットフォーム コンポーネントのパフォーマンスおよびリソース消費に関連する認識です。Windowsの目標は、開発者に対して信頼性が高く、一貫性のあるプラットフォーム ― 開発者が常にシステム サービスが提供されている場所として頼れるだけでなく、すべてのカスタマーへの恩恵につながる可能性を持つ OS の機能を当てにできる場所 ― を提供することにあります。同時に、私たちは、システム リソースの活用面で効率的な ― メリットが費用を上回るのに十分なほどの ― 方法でこれを実践する必要があります。ユーザーの何割かは手で計算する以外、この方程式の解答は得られないと信じていることも認識しています。車の性能を最大限引き出すには、マニュアル トランスミッションしかないと信じている人がいるように。このポストでは、広く利用可能なプラットフォーム コンポーネント、および豊かなエンドユーザー機能を提供するためにデスクトップ検索機能について検討するとともに、関連するエンジニアリング上のトレードオフ、およびすべてのユーザーにとってすばらしい解決策を構築するために採用している技法について説明します。このポストには Find and Organize チームのプリンシパル SDE の 1 人、Chris McConnell に協力してもらいました。-- Steven

ドライブのランプが激しく点滅している原因は検索インデックスの作成にあると信じていますか?友人とシューティング ゲームをプレイしているときに遅れをとる理由はこれだと信じていますか?もしこれらを本当に信じていらっしゃるのなら、今回はまさにあなたのためのポストです。Find and Organize チームは「Windows サーチ」サービスを担当しています。私たちはこれをシンプルに「インデクサー」と呼んでいます。一部の Vista パワー ユーザーからは「インデクサーを無効にして欲しい」と繰り返し聞かされています。彼らはインデクサーに PC の貴重なシステム リソースを食い尽くされているわりには、得られるものがほとんどないと信じているのです。私たちが遠隔測定した(テレメトリー)データによると、インデックス作成サービスを無効にしているのは多くても Vista ユーザーの約 1.5% です。上に書いたような認識が彼らにそうさせているのだと考えられます。

この記事はインデクサーの役割を明確化し、およびインデクサーがシステム リソースをどのように使用しているかを調査した結果について説明いたします。まず、インデックス作成サービスの機能について話すことから始めましょう。それは何のためのものでしょう?なぜそれを動作させておかなければならないのでしょうか。

インデックスの目的

今日の PC は、文書、写真、音楽、ビデオなど、さまざまな種類のファイルがあります。ユーザーが PC に保存しているファイルの数は急速に増加しています。どんなにファイルを整理しておいたとしても、欲しいものを見つけるのは日に日に難しくなっていきます。次第に、これらのファイルには、コンテンツを記述するメタデータ プロパティ大量に含まれるようになってきました。典型的な音楽ファイルには、アーティスト、アルバム名、リリース年、ジャンル、演奏時間など、音楽を捜すときに非常に役に立つ情報を記述した特性が含まれます。

検索インデックス作成技術は Windows の初期にさかのぼりますが、Microsoft は Windows Vista でより多くのユーザーに対してこの機能を使っていただけるようにしました。Vista 以前の Windows における検索機能は非常に原始的で、多くの場合、ファイル名や修正日時、サイズといった単純なファイル プロパティや、アプリケーション固有のデータが持つアプリケーション固有のインデックスを頼りに、マシン上のファイルをしらみつぶしに探し回るだけの機能でした。また、より包括的な検索オプションを使って、Windowsの範囲内でファイルの内容を調べることもできましたが、これはあまり使われませんでした。これは極めて基本的な機能でした ― すべてのファイルをまったく同じに扱い、ファイルで利用できる豊富なメタデータ特性には触れもしませんでした。

Windows Vista では、インデックス作成サービスは既定では有効に設定されており、インデックス付けされているさまざまなファイル形式やプロパティに対する拡張サポートが用意されています。インデクサーは PC に保存されているフォルダーを見て、その内容をカタログ化し、ファイルをすばやく検索できるようにします。Windows は、音楽ファイルに索引付けするときに、ユーザーが最も検索しそうな音楽特有のプロパティを抽出する方法もわかっています。これにより、以前では不可能だった、より強力なファイル検索とより豊富な情報表示のサポートが可能になります。しかし、このインデックス作成機能はタダでは手に入りません。ここからエンジニアリングは面白くなっていきます。システム資源に関して言えば、この機能性を実現するために払われなければならないコストはゼロではありません。また、その代価をいつ、どのように支払うかに関するトレードオフもあります。これはインデックス作成だけのことではありません。すべての機能で、このコストとメリットの間のトレードオフが行われているのです。

トレードオフ

多くの検索ソリューションは従来の「grep」モデルに従っています。つまり、いかなる検索でも、検索の対象となるファイルがすべて読み込まれます。この場合、検索が実行されるのを待っていた時間を対価として支払ったことになります。検索するファイルの数が多ければ多いほど、検索するたびに待つ時間も長くなります。再び同じ検索を行う場合、もう一度、この代価を「支払う」ことになります。しかし、検索機能はそれほど強力ではありませんでしたから、見返りはそれほど価値のあるものではありませんでした。Windows Vista では、インデクサーはユーザーが検索する前にすべてのファイルを読み込もうとするので、検索したときには通常、より早く、より感応度が高くなっています。このために、インデクサーは最初に一度だけ、すべてのファイルをスキャンする必要があります。ユーザーが検索を実行するたびにではありません。ファイルが変更された場合、インデクサーは通知 (プッシュ イベント) を受け取り、このファイルをもう一度読み込めるようになります。インデクサーはファイルを読む場合、より強力な検索や表示を可能にするために、このファイルについて適切な関連情報を抽出します。これには、インデックスが常に最新で、すぐに検索に使用できるくらいすばやくこの作業を行うということだけでなく、システムのパフォーマンスにマイナスの影響を与えないような方法をとらなければならないという難題があります。この作業では常にコストとメリットの釣り合いをとることが必要です。また、“善良な Windows 市民”としての立場を維持しながら、インデックスが常に最新の状態であることを保障するために、インデクサーがすることは多数あります。

模範的市民

インデクサーを模範的な Windows 市民にするために、さまざまな努力が行われてきました。私たちはこの件について、詳細なホワイトペーパーを発行していますが、その重要な部分をいくつかここで紹介する価値はあるでしょう。まず第一に、インデクサーは特定のフォルダーを監視するだけです。これにより、インデクサーがしなければならない仕事の量が、ユーザーが検索しそうなファイルの分のみに制限されます。また、ユーザーが PC を継続的に使用しているときには、インデクサーは作業のペースを落とします。インデクサーは、PC での作業レベルに応じて、ファイルへの索引付け速度を緩めるか、または完全に停止します。インデクサーはファイルの読み込みには優先順位の低い I/O と CPU を使用します。また読み込み中に別のアプリケーションからこのファイルへのアクセスが要求された場合は、即座にこのファイルを解放します。

インデクサーに対するこれらの問題をすべて解決することは重要です。なぜならば、これは、私たちのチームがビルドしている Windows Search などの機能だけではなく、Windows プラットフォーム全体にとって重要なことだからです。PC でファイルの内容を検索する能力を必要としているアプリケーションは多数あります。このようなアプリケーションが個々に独自のインデクサーを構築していたらどうなるか、想像してください。これらのアプリケーションがすべてすばらしい仕事をしたとしても、PC 上ではたくさんの不必要で冗長な処理が行われることでしょう。文書を 1 つ保存するたびに、これらの異なるインデクサーが早く新しいバージョンを読み込もうとアクセスして、にわかに処理が活発になります。これに対処するため、インデクサーは他のアプリケーションが利用しやすいように設計され、柔軟性と拡張性を備えたオープンなプラットフォームと APIを開発者に提供しているのです。この API は、Windows エコシステム全体にわたるニーズを満たせるほど柔軟に設計されています。箱から出してそのままの状態のインデクサーは、既定の設定で、およそ 200 の一般的なファイルの種類についての情報を持ち、400 種類近くのプロパティのカタログを作成することができます。また、いつでもアプリケーションに新しいファイルの種類やプロパティを追加することが可能です。さらに、アプリケーションは電子メールのようにファイルをベースとしていないデータ型のインデックス作成に対するサポートを追加することもできます。Microsoft Office Outlook および OneNote、Lotus Notes、Windows Live Photo Gallery、Internet Explorer 8Google Desktop Search は、現在、インデクサーを活用しているアプリケーションのほんの一例です。すべての拡張可能システムと同様に、システム サービス用コンポーネントの創造的な用途を、開発者が見つけることはよくあります。タブレット PC コンポーネントが手書き精度を向上させるためにコンテンツのインデックスを活用する方法はこの一例です。

継続的な進化

インデクサーのパフォーマンスや信頼性を向上させるために、私たちは常に努力を続けています。バージョン 3 は、Windows Vista とともに出荷されました。このバージョンでは以下の機能を進化させました。

  • インデクサーは、ユーザー単位のプロセスではなく、システム サービスとして動作します。これにより、マルチユーザー シナリオでの影響を最小限に抑えることができます。たとえば、1 つのシステムあたりのカタログの数を 1 つのみに制限することにより、カタログのサイズが小さくなり、同じ内容のインデックスが何度も再作成されることを防ぐことができます。またそのサービスは堅牢であるという特長があります。
  • PC の応答性に対するインデックス作成の影響を最小限に抑えるため、インデクサーは優先順位の低い I/O を使用します。Windows Vista 以前は、すべての I/O は同等に扱われていました。

私たちは、Windows XP および Vista に対する機能強化として、すでに Windows Search  Version 4 をリリースしています。Version 4 は次のようにパフォーマンスおよび安定度の向上という面でさらに先を行っています。

  • 並べ替え、フィルタ処理、グループ化を必要とするクエリーのための大幅な機能強化。たとえば、Vista では以下のような点が強化されています。
    1. 並べ替えやグループ化を行いながらすべての結果を得るという点が強化されています。典型的なクエリー速度は、最高 38% 向上しています。
    2. CPU 時間は 80% 削減されています。
    3. メモリーの使用量は 20% 削減されています。
  • Outlook がオンライン モードで動作しているとき、Exchange サーバーの負荷は 95% 以上削減されます。従来の Windows Search のバージョンでは、オンライン モードで動作している大量 の Outlook クライアントにより、Exchange サーバーの処理能力はすぐにオーバーフローしてしまいました。
  • 信頼性については以下の点が強化されています。
    1. インデックスの作成作業を停止させる原因となっているとユーザーから報告されていた状況に対応するために、多数の機能修正を行いました。
    2. インデクサーで、インデックスの破壊を防止し、壊れたインデックスを復旧する機能を強化しました。その結果、破壊が検出されたカタログは自動的に再構築されるようになりました。従来のバージョンでは、これは特別な場合にのみ行われていました。
    3. 信頼性の問題を追跡し、修正しやすくするために、新しいログおよびイベントを追加しました。

私たちは、近く PDC で発表される Windows 7 に搭載されるインデクサーのパフォーマンスおよび信頼性を高めるために、さらにたくさんの機能改善を行っています。

それでもインデクサーがみなさんに迷惑をおかけしているとしか思えない場合は、以下を試してみてください。

  • Vista または XP を使用している場合は Windows Search 4 をダウンロードし、インストールしてください。
  • Vista を使用している場合は、Windows Live ガジェット ギャラリーから Indexer Gadget をダウンロードし、インストールしてください。私たちのチームの 1 人が作成したこのガジェットを使用すると、インデックス付けされたアイテムの数をすばやく確認することができます。また、インデックス作成を一時停止したり、作業のペースを落とさずに、フル スピードで実行したりできるようになります。
  • “車のボンネットの下に首を突っ込んで、エンジンをつつきまわすのが好き”というような方は、Windows のタスク マネージャーやリソース モニターを使用して、SearchIndexer、SearchFilterHost、SearchProtocolHost の 3 つのプロセスを監視してください。

使用しているシステムが遅いのはインデクサーが原因である、という疑いがある場合は、PC で作業をしながら、このガジェットを観察してください。問題が発生しているときに、インデックス付けされたアイテムの数は大きく変化しているでしょうか。インデクサーを一時停止すると、システムは回復するでしょうか。それでもまだ、問題が発生するようでしたら、どうぞ私たちにお知らせください。私たちは常にみなさんの検索機能をよりよいものにしたいと思っています。フィードバックのあて先は idx-help@microsoft.com です。

Chris McConnell

Find and Organize