Windows 10の検索機能は19H1で改良 除外フォルダー以外全部を対象にできるようになった
Windowsの検索機能である「Windowsサーチ」は、Windows 10 Ver.1903(19H1)から改良が続いている。しかし、新しい機能を使おうとすると、システムの負荷が定常的に上がったままになることがある。これは、インデックス作成のプロセスがずっと起動しているためだ。
Windowsサーチのインデックス作成プログラムは「Indexer」(インデクサー)と呼ばれ、SearchIndexer.exeが本体だ。このプログラムは、検索対象フォルダーをスキャンして、プロパティ(ファイル名や作成更新日時など)や、ファイル内部のキーワードを取り出し、検索を高速化するためのインデックスファイルを作成、維持するためにある。
このあたりの基本的な話は、Windows 8.1時代に少し解説している。
●ASCII.jp:Windows標準のサーチ機能を活用する
https://ascii.jp/elem/000/000/942/942736/
●ASCII.jp:Windowsの検索機能で用いられるサーチインデックスを制御する
https://ascii.jp/elem/000/000/938/938533/
基本的な仕組みは変わっていないのだが、19H1からは、対象をライブラリやデスクトップに限定しない「拡張」モードが搭載された。
これに対して従来の検索モードを「クラシック」と呼ぶ。そもそもそのようなモードがあるのは、対象ファイルが多すぎたときに、インデクサーがWindowsのCPU負荷を食い潰すからであった。そこで最初にVistaに搭載されるとき、インデックス化の対象を限定したわけだ。
しかし、このときに対象であった「ライブラリ」はユーザーの利用頻度が低く、さらにWindows 10ではデフォルトでは表示されないものになってしまった。一般的なWindowsユーザーは、標準のドキュメントフォルダーに拘ることなく、さまざまな場所にデータを置いているのが現実だ。そうした場所にあるファイルが検索できないため、Windowsサーチはあまり役に立たないという評価に繋がった。そして、負荷を下げるためにWindows Searchサービス(WSearch)を止めてしまうユーザーも出てきたわけだ。
こうした状況を改善しようとする動きが始まったのが19H1からで、当初はコルタナと統合されていたWindowsサーチが分離され、別アイコンとしてタスクバーに設置され、サーチのフライアウトが改良された。こちらはBing検索と統合されているため、Windowsのアップデートとは直接連動せず、ときどき変更がなされている。
その後の大きな動きとしては、エクスプローラーとWindowsサーチの統合が挙げられる。これまで、エクスプローラーからWindowsサーチを使うことはできたが、Windowsサーチがインデックス化対象を限定していたため、エクスプローラーで選択中のフォルダーがインデックス化対象になっている可能性は低く、その場で検索を開始していた。
しかし、環境によっては膨大なファイルがあり、これを片端からスキャンしていくような処理は、いつまでたっても終わらない可能性がある。たとえば、マイコンピューターなど、システムのストレージ全体を含むような場所での検索は、答えが出る前にユーザーが諦めるか、Windowsが適当なところで中断して「検索条件に一致する項目はありません」といった結果になりやすい。その割には、システム負荷が高くなるのは、我慢できないと考えるのは“普通”の感覚だろう。
しかし、Windowsサーチは20H1でも改良が進んでいる。エクスプローラーのサーチ機能が改良され、インデックス情報を使って、検索ボックスにキーワード候補を表示できるようになった。
また、従来のエクスプローラーのファイルウィンドウでは、アルファベット文字を入力すると、該当フォルダー内でその文字を先頭に持つフォルダー、ファイルが選択状態となったが、これが検索欄への入力に変わった。正しくファイルやフォルダーが選択できることが多いが、従来に比べて一呼吸待たねばならない。長年、ローカルフォルダーを先頭一致でファイルを選択していた筆者にとってはつらい「改良点」でもあるのだが。
インデックス処理がいつまでも終わらない
Windowsを使っていてなんとなく負荷が高いんじゃないか? という感じがあったら、まずはタスクマネージャーやリソースモニターで、SearchIndexer.exeのCPU負荷を見てみよう。ただし、インデクサーは、ユーザーのファイル書き換えや外部からのファイルコピーなどのタイミングで、ときどき動作している。また、機能アップデートなどがあると、インデックスを最初から作り直すこともあるようだ。
リソースモニターでは、特定のプロセスを追いかけて、CPU負荷をグラフに表示する機能があるので、「CPU」タブで「searchindexer.exe」を探して、先頭のチェックボックスをオンにする。すると、左側のグラフでチェックをオンにしたプロセスが占める負荷状態がオレンジの線で表示される。ここが「数日」以上ゼロにならないようなら、インデックス作成のトラブルを疑ったほうがいい。
「設定」→「検索」→「Windowsの検索」→「インデックスステータス」を見てみよう。
ここにインデクサーが処理したアイテム数と未処理のアイテム数が表示されている。「インデックス付けされた項目」の数が増え、「保留中」の数が減っていくのが通常動作だが、インデックス作成中にエラーが起きると、前者の数が激減して、後者の「保留中」の数が大きくなる。この状態を繰り返しているようなら、インデックス作成中にエラーが発生し、処理が終わらない状態だ。
19H1のアップデート以来、検索モードを「拡張」にすると、対象から明確に外されたフォルダー以外は、インデックス化の対象になる。このインデックス化の処理では、途中でエラーが起こることがある。原因は不明だが、インデクサーがエラーとなり、結果的にインデックス化処理を最初からやり直す。このため、長時間インデクサーが動作することになる。
ただし、エラーが起こってやり直しになるのは、Windowsアップデートなど、ファイルシステムが変わったときの初回のインデックス化の処理で、その後は修正されたファイルのみインデックス化処理となり、最初からやり直すことはないようだ。おそらく、初回のインデックス化処理を終わらせてしまえば、多少のエラーがあっても、インデックスの再構築にはならないのであろう。
簡単な対策として、検索モードを「クラシック」とする方法もある。筆者の環境では、19H1へのアップデート以後、インデクサーがエラーを繰り返すと、「拡張」に設定した検索モードが、いつのまにか「クラッシック」に戻されていた。本当にどこにあるかわからないファイルを探すのが面倒になるが、19H1以前はこれが標準だったので、今までファイル探しで検索機能に頼ったことがほとんどないというような場合には有効な対策かもしれない。
インデクサーのトラブルシューティング用ツールがある
またトラブルがある場合は、Microsoftストアで配布されている「Indexer Diagnostics」というアプリをインストールしよう。これは、マイクロソフトが作成したインデクサーのトラブルシューティング用ツールだ。設定などと同じく、インデックスの作成状態や、最近1時間に実施したインデックス化のアイテム数などを表示する機能があり、状況を把握しやすい。ただし、このツールの負荷は低くないので、常時起動するのはおすすめしない。
左側のタブで「Search is not Working」を開くと、「Restart」と「Reset」ボタンがある。前者は、Windowsサーチサービスを再起動するもの、後者は、サービスをリセットするものだ。
とりあえずはこれを使って、エラーが解消されるかどうか試してみる。ただし、うまくいってるかどうかの判定は、ある程度動かしてインデックス化状態をみなければならないので、ちょっと時間がかかる。同様のものに「設定」→「更新とセキュリティ」→「トラブルシューティング」→「追加のトラブルシューティングツール」→「検索とインデックス作成」がある。
こちらは、自動で状況を判定して対策をするようなのだが、何をしているのかについては情報がない。19H1でインデクサーがエラーで処理を繰り返してるときに試したが、筆者の環境ではエラーは解消できなかった。もっとも、これもアップデートなどで改良される可能性もあり、とりあえずの簡易な方法として最初に試してみる価値はあるかもしれない。
これでも、エラーでインデックス化を繰り返しているようなら、Indexer Diagnosticsアプリの「What is Being indexed?」タブを選んで、対象フォルダーを限定し、ファイル数を減らしてみる。
ドライブ全体をインデックス化対象とするような指定をやめて、最低限必要なところを指定するか、不要と思われるところを指定する。同様の指定は、コントロールパネルの「インデックスのオプション」→「変更」でもできる。指定内容はどちらも同じだが、ユーザーインターフェースが異なる。
対象を限定して、エラーが出なくなったら、少しづつ対象フォルダーを広げていく。特に別ドライブに大量のファイルを持っているような場合には、段階的に追加していくことで、エラーを出さずに検索対象にできることがある。
一回正しくインデックス化がなされると、以後は、変更があったファイルやフォルダーのみをインデックス処理するようになるため、インデクサーが常時CPU負荷を高くするようなことはなくなるようだ。とはいえ、筆者も年中インデックサーを監視しているわけでもない。もしかしたら、何かの原因でまたインデクサーが最初から処理をやり直すかもしれない。とりあえずの対処療法と心得て頂きたい。
このインデックサーの挙動や前回のタッチ操作なんかを見ると、最近のWindows 10は、あっちを直せば、こっちがおかしい、という感じがある。なんか、コメディー映画の水漏れのシーンを思い出す。水漏れを手で抑えると別のところから水漏れし、そっちを抑えるとまた別のところから水漏れするというアレである。