検索ルートの管理

クロール スコープ マネージャー (CSM) を使用すると、Windows Search クロール スコープとの間でデータ ストアの検索ルートを追加および削除できます。

このトピックには、次のテーマが含まれます。

 

検索ルートについて

検索ルートは、特定のスコープを含めたり除外したりできるシェル名前空間のベースを定義します。通常は、列挙可能なプロトコルの最上位レベルのコンテナーです。 このストアのどの部分にインデックスを作成するか、またはインデックスを作成すべきでないかを指定しません。これは、コンテンツ ストアが存在し、登録されたプロトコル ハンドラーに関連付けられていることを通知するだけです。 検索ルート URL を識別するための構文には、プロトコル、ストアまたはユーザーのセキュリティ識別子、パス、および必要に応じて特定の項目 (ファイルなど) が含まれます。 次の例は、検索ルートの 2 つの形式の構文を示しています。

<protocol>://<store or SID>\<path>\[item]
or
<protocol>://<store or SID>/<path>/[item]

<protocol> セグメントの後には、2 つのスラッシュ ('/') が続く必要がありますが、file: プロトコルの場合は、3 つのスラッシュ (file:///) が必要です。 <サイトまたはSID>セグメントは、検索ルートがユーザー固有である場合、コンテンツストアまたはユーザーセキュリティ識別子を表します。 <path> セグメントは、ディレクトリやフォルダーなどのコンテナーのセットであり、ワイルドカード文字 '*' を含めることができます。 <item> セグメントは省略可能であり、ワイルドカード文字 '*' を含めることもできます。 項目を含まない場合は、必ずスラッシュでパス セグメントを終了するか、インデクサーは最後のサブコンテナーが項目であると見なします。

たとえば、カスタム アプリケーションの *.myext 型のファイルを処理するプロトコル ハンドラー (myPH) を実装したとします。 これらのファイルはすべて、ローカル コンピューターの WorkteamA\ProjectFiles フォルダーにあります。 検索ルートは次のようになります。

  • myPH:///C:\WorkteamA\ProjectFiles\

すべての .myext ファイルをインデックスに含める予定ですが、そのコンテナーの他のファイルは含めないことを計画しているとします。 検索ルートは次のようになります。

  • myPH:///C:\WorkteamA\ProjectFiles\*.myext.

ワイルドカード パターンは、ワイルドカード文字 '*' を使用して URL を定義し、URL ではなくパターンと見なされますが、用語は同じ意味で使用されることがよくあります。 たとえば、file:///C:\ProjectA\*\data\ は次の URL と一致します。

  • C:\ProjectA\version1\data\
  • C:\ProjectA\version2\data\

しかし、そのパターンはこのURLと一致しません:

  • C:\ProjectA\version1\temp\data\

インデクサーのクロール スコープにまだ含まれていないコンテナーの新しい検索ルートを作成する必要があります。 パス C:\ParentScope がクロール スコープに既に含まれている場合は、子スコープが以前に除外されていることがわかっている場合を除き、C:\ParentScope\ChildScope の新しい検索ルートを追加する必要はありません。

Windows 検索オプションを設定するためのユーザー インターフェイスには、検索ルートがユーザーに表示されるため、検索のスコープ ルールを絞り込むことができます。 カスタム プロトコル ハンドラー、コンテナー、アプリケーションのインストール プロセスの一環として、既定のクロール スコープを定義し、包含ルールと除外ルールを使用できます。 これらのルールは、エンド ユーザーに場所として表示されます。 ユーザーは、定義済みの検索ルートのサブディレクトリ内を移動し、検索に含めるものを選択するか、除外するものをクリアできます。

 

開始する前に

クロール スコープ マネージャー (CSM) インターフェイスのいずれかを使用する前に、次の前提条件の手順を実行する必要があります。

  1. CrawlSearchManager オブジェクトを作成し、その ISearchManager インターフェイスを取得します。
  2. ISearchCatalogManager インターフェイスのインスタンスを取得するには、"SystemIndex" の ISearchManager::GetCatalog を呼び出します。
  3. ISearchCatalogManager::GetCrawlScopeManager を呼び出して、ISearchCrawlScopeManager インターフェイスのインスタンスを取得します。

クロール スコープ マネージャー (CSM) に変更を加えた後、 ISearchCrawlScopeManager::SaveAll を呼び出す必要があります。 このメソッドはパラメーターを受け取らず、成功した場合はS_OKを返します。

 

Windows 7: 新しいクロール スコープ マネージャー API

Windows 7 以降では、ISearchCrawlScopeManager2 は ISearchCrawlScopeManager インターフェイスの機能を拡張します。 ISearchCrawlScopeManager2::GetVersion メソッドは、クロール スコープ マネージャー (CSM) バージョンを取得します。これは、CSM の状態が変更されたかどうかをクライアントに通知します。 ISearchCrawlScopeManager2::GetVersion では、プロセス間の呼び出しは行われません。 関数が成功した場合、返されるポインターは、クライアントがポインターで UnmapViewOfFile を呼び出し、返されたハンドルで CloseHandle を呼び出すまで有効なままです。

 

クロール スコープへのルートの追加

ISearchCrawlScopeManager は、クロールや監視を行うコンテナーと、それらのコンテナーの下にある項目を含めるか除外するかを検索エンジンに通知します。 新しい検索ルートを追加するには、 ISearchRoot オブジェクトをインスタンス化し、ルート属性を設定してから 、ISearchCrawlScopeManager::AddRoot を呼び出して 、ISearchRoot オブジェクトへのポインターを渡します。 検索ルート URL は、前に説明した検索ルートと同じ形式になります。

次の表では、 ISearchRoot に関連する put メソッドについて説明します。インターフェイスの他の put メソッドは、Windows Search では現在使用されていません。 セキュリティを向上するために、すべてのルートにユーザーのセキュリティ識別子 (SID) を含めてお勧めします。 クエリはユーザーごとのプロセスで実行されるため、ユーザーごとのルートの方が安全です。たとえば、あるユーザーが別のユーザーの受信トレイからインデックス付けされたアイテムを見ることができないようにします。

メソッド Description
通知を提供するように設定する プロトコル ハンドラーまたは他のアプリケーションが検索ルートの URL への変更について検索エンジンに通知する場合は TRUE に設定します。 この通知は、URL のインデックス再作成が必要であることを示します。
put_RootURL (ルートURLを設定する機能) 現在の検索のルート URL を設定します。 URL は、前に説明した検索ルート フォームを受け取ります。

 

 

既定では、検索ルートを追加しても、インデクサーはスコープをクロールしません。 ルートに対するインクルードルールを追加する必要があります。 アプリケーションのユーザー固有のルートを追加する場合、そのアプリケーションは、アプリケーションの起動時に新しいユーザーに適切なルートを追加する必要があります。

新しいユーザーに適切なルートを追加するには:

  1. ユーザーの SID を取得します。
  2. すべてのルートを列挙して、この SID に存在するかどうかを確認します。
  3. 必要に応じて、SID を使用して新しいルートを追加します。

 

クローリング スコープからルートを削除する

ISearchCrawlScopeManager を使用すると、その URL のインデックスが作成されなくなったときに、クロール スコープからルートを削除できます。 ルートを削除すると、その URL のすべてのスコープ ルールも削除されます。 たとえば、コンテンツ ストアやそのプロトコル ハンドラーをシステムからアンインストールするとします。 アプリケーションをアンインストールし、すべてのデータを削除してから、クロール スコープから検索ルートを削除すると、クロール スコープ マネージャーによってルートとルートに関連付けられているすべてのスコープ ルールが削除されます。

既存の検索ルートを削除するには、削除する検索ルートで ISearchCrawlScopeManager::RemoveRoot を呼び出します。 検索ルート URL は、前に説明した検索ルートと同じ形式になります。 このメソッドは、ルートが見つからない場合はS_FALSEを返し、見つかったルートの削除でエラーが発生した場合はエラー コードを返します。

検索ルートを削除すると、Windows Search オプションのユーザー インターフェイスからも URL が削除されるため、ユーザーはユーザー インターフェイスを使用してそのコンテナーまたは場所を再追加できない可能性があります。 検索ルートのすべてのユーザー セットのオーバーライドを削除し、元の検索ルートとスコープルールに戻すこともできます。 詳細については、「 スコープ ルールの管理」を参照してください。

注

Windows Vista では、ユーザーがコントロール パネルの [ユーザー プロファイル] を使用して削除された場合、CSM は SID を持つすべてのルールとルートを削除し、カタログからインデックス付きアイテムを削除します。 Windows XP では、ユーザーのルートとルールを手動で削除する必要があります。

 

 

クロール スコープ内でのルートの列挙

CSM は、標準の COM スタイルの列挙子インターフェイス IEnumSearchRoots を使用して検索ルートを列挙します。 このインターフェイスを使用すると、さまざまな目的で検索ルートを列挙できます。 たとえば、クロール スコープ全体をユーザー インターフェイスに表示したり、特定のルートまたはルートの子が既にクロール スコープに含まれているかどうかを検出したりできます。

 

リファレンス

ISearchCrawlScopeManager

ISearchRoot

IEnumSearchRoots

概念的

クロール スコープ マネージャーの使用

スコープ ルールの管理