このページの本文へ

前へ 1 2 次へ

Windows Info 第31回

Windowsの検索機能で用いられるサーチインデックスを制御する

2014年10月02日 12時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

インデックス作成の動作

 インデックスの作成は、Windowsのサービスとして実装されている。このサービスは、システムがアイドル状態となったことを検出して自動的に動作するようになっている。実体としてのプロセスは、Windows Search Indexer、Search Protocol Host、Search Filter Hostだ。後者の2つは、それぞれサーチ用プロトコルハンドラー、フィルター(およびプロトコルハンドラー)を起動し、対象ファイルからの情報を抽出する。

インデックスサービスは、データストレージ(ファイルのみとは限らない)の変更をNotification ProvidersによりイベントとしてGathererに通知、Gathererは、対象のURLをキューに登録していく。キューに登録されたURLは、Filter HostとSearch Protocol Hostの2つのプログラムが処理し、対象からプロパティ情報や内容のキーワードを読み出していく。その後、キーワードとURLの組がキーワードごとに統合されてインデックス情報として記録されていく(MSDNによる解説ページから引用)

 インデックスの作成は、システム側の「通知プロバイダ」から、ファイルやデータの変更といったイベントがインデックス作成システムに送られて開始される。この通知プロバイダには、NTFSやFATといったファイルシステムやOutlook(メールの着信などでインデックス作成を要求するためにイベントを送る)などがある。

 ただし、インデックスの作成はどのファイルに対してもではなく、ユーザーの指定した「クロール範囲」に対してのみ行なわれる。クロール範囲は、フォルダなどの「場所」と対象とするファイル形式で指定される。

 また、ファイル形式に対しては、ファイル名や作成日時などのプロパティのみとするか、内容までインデックス化の対象とするかを指定できる。ただし、内容をインデックス化できるのは、フィルターが用意されている場合のみだ。クロール範囲はユーザーがコントロールパネルの「インデックスのオプション」から変更が可能だが、Windows7以降は、ユーザーフォルダに対して、すべての登録されたファイル形式がデフォルトのクロール範囲として指定されている。

 通知プロバイダから、ファイルやデータストアなどの変更通知を受け取ったら、インデックスシステムは、それがクロール範囲に属するかどうかをチェックし、範囲内であれば、インデックス作成のためにこれを「インデックス作成キュー」記録していく。

 キューとは、複数のデータを記憶する仕組みで、最初に登録したものが最初に取り出せるようになっている。一般に「待ち行列」などと呼ばれ、繁盛している店舗にできる「行列」と同じである。なお、このとき、ファイルやファイル中の情報を示すため、対象はURLで表現される。URLはWebページなどを指し示す場合に使うが、さまざまなプロトコルやローカル、リモートを問わずに対象を指定できる。

 インデックス作成キューでは、フィルターやプロパティハンドラ、プロトコルハンドラを使ってインデックス情報のキーワード側になるプロパティ情報や本文などから抽出した単語と、URLの対応情報を作り出す。これをあとからキーワードごとにまとめることで、キーワードや日付などのプロパティ情報とURL(複数の場合もありえる)を対応させるインデックスができあがる。

サービスを停止する

 「インデックスのオプション」を使うことで、前述のクロール範囲などを指定することが可能だ。ここにある「変更」ボタンは、対象になる「場所」を変更する場合に使い、ファイル形式とそのインデックス化対象の指定は、「詳細設定」ボタンを使う。

「変更」ボタンでは、インデックス対象を指定できる。ファイルに関しては対象フォルダを限定することも可能

 詳細オプションウィンドウにある「ファイルの種類」タブでは、システムに登録されている拡張子がリストとして表示され、それぞれをインデックス化の対象にするかどうか、「インデックスの作成方法」では、プロパティのみを対象とするか、ファイルのコンテンツも対象にするかを選択できる。なお、どのファイル形式(拡張子)でもコンテンツをインデックス化の対象にできるが、実際に対象になるのは、フィルターなどが用意されている場合のみだ。

詳細設定ボタンを押して表示されるダイアログボックスには、2つのタブがあり、対象ファイル形式やその動作を指定するには、「ファイルの種類」タブを開く

ここには拡張子ごとにファイルが登録されており、拡張子別にファイルのプロパティのみか、内容(コンテンツ)までインデックス化するかを指定できる。ただし、コンテンツの処理には、フィルターが登録されている必要がある

 また、「インデックスのオプション」にある「一時停止」ボタンは、インデックスの作成中に限り15分間、インデックス作成作業を休止させるもの。

 モバイルマシンなどをバッテリ運用する場合、インデックス作成によるバッテリ消費などが気になるなら、インデックスサービスを停止させるという方法がある。ただし、この方法ではインデックスが中途半端なまま残り、検索を行なったときに、正しく結果が表示されない可能性がある。しかしインデックスがなくとも、Explorerなどの検索機能は利用可能だ。

 サービスを停止させる場合、依存関係に注意する必要がある。あるサービスの実行に別のサービスが関連していて、依存関係も持つサービスがすべて終了しないとサービスを終了できない場合があるからだ。インデックスサービスにも依存関係を持つサービスがあり、Windows 8では、ワークフォルダサービス、メディアプレーヤー・ネットワーク共有サービスが関連している。ただし、ドメイン運用していないクライアントマシンでは、ワークフォルダサービスは停止しているはずだ。

 サービスの停止などは、GUIで行う場合、管理ツールにある「サービス」やタスクマネージャから行なう。GUIツールを使う場合には、依存関係を含めて停止を行うことができる。

サービスは、「管理ツール」の「サービス」で停止できる

また、タスクマネージャからも「サービス」の停止が可能

 しかし、GUI操作はユーザーが手作業で行わねばならず、1クリックで実行というわけにもいかない。こうした場合には、スクリプトやバッチなどからサービスを停止できるようにしておくといいだろう。

 バッチコマンドを使う場合には、scコマンドが利用できる。なお、どのような場合でもサービスの停止には、管理者権限が必要であるため、管理者権限でスクリプトやバッチファイルを起動できるようにしておく。Windows 8.1では、タスクバー左のウィンドウズロゴアイコンを右クリックしてメニューから「コマンドプロンプト(管理者)」を選べば良い。

 scコマンドには、いくつものサブコマンドがあるが、サービスの停止、再開に関していえば、以下のサブコマンドを覚えればいいだろう。それ以外のコマンドについては「sc /?」でヘルプを表示させることができる。

start:サービスを開始
stop:サービスを停止
query:サービスの状態を表示
EnumDepend:依存関係を表示

 インデックスサービスの名称は「wsearch」である。サービスの状態を見るには「query」サブコマンドを使い。

sc query wsearch

とする。また、wsearchと依存関係にあるサービスを探すには、

sc EnumDepend wsearch

とすればよい。サービスの開始と終了は、

sc start サービス名
sc stop サービス名

である。wsearchサービスを止めるには、EnumDependサブコマンドで依存関係にあるサービスを探し、これを止めた後、wsearchサービスを停止させる。Windows 8では、WSearchに依存するサービスがある。これを含めた操作手順を下の囲みに示しておく。

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>sc EnumDepend wsearch
[SC] EnumDependentServices: entriesread = 2

SERVICE_NAME: workfolderssvc
DISPLAY_NAME: Work Folders
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 1 STOPPED
WIN32_EXIT_CODE : 1077 (0x435)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

SERVICE_NAME: WMPNetworkSvc
DISPLAY_NAME: Windows Media Player Network Sharing Service
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

C:\WINDOWS\system32>sc stop WMPNetworkSvc

SERVICE_NAME: WMPNetworkSvc
TYPE : 10 WIN32_OWN_PROCESS
STATE : 3 STOP_PENDING
(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x1f4

C:\WINDOWS\system32>sc stop wsearch

SERVICE_NAME: wsearch
TYPE : 10 WIN32_OWN_PROCESS
STATE : 3 STOP_PENDING
(NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x1
WAIT_HINT : 0x7530

C:\WINDOWS\system32>sc query WMPNetworkSvc

SERVICE_NAME: WMPNetworkSvc
TYPE : 10 WIN32_OWN_PROCESS
STATE : 1 STOPPED
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

C:\WINDOWS\system32>sc query wsearch

SERVICE_NAME: wsearch
TYPE : 10 WIN32_OWN_PROCESS
STATE : 1 STOPPED
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

C:\WINDOWS\system32>

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン