共用方式為


管理搜尋根目錄

編目範圍管理員 (CSM) 可讓您在 Windows 搜尋編目範圍中新增和移除資料存放區的搜尋根目錄。

本主題包含下列主旨:

 

關於搜尋根目錄

搜尋根定義殼層命名空間的基底,其中可以包含或排除特定範圍,而且通常是可列舉之通訊協定中的最高層級容器。 它不會指定此存放區應該或不應該編制索引的部分;它只會發出內容存放區存在且與已註冊通訊協定處理常式相關聯的訊號。 用來識別搜尋根 URL 的語法包括通訊協定、存放區或使用者的安全性識別碼、路徑,以及選擇性的特定專案 (,例如檔案) 。 下列範例顯示搜尋根目錄的兩種語法形式。

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

通訊 < 協定 > 區段後面必須接著兩個 (2) 斜線 ('/') ,除非它是檔案:通訊協定,這需要三個斜線 (file:///) 。 <網站或 SID > 區段代表內容存放區或使用者安全性識別碼,如果搜尋根目錄是要專屬於使用者。 <路徑 > 區段是一組容器,例如目錄或資料夾,而且可以包含萬用字元 '*'。 專案 <> 區段是選擇性的,也可以包含萬用字元 '*'。 如果您沒有包含專案,請務必使用斜線完成路徑區段,否則索引子會假設最後一個子容器是專案。

例如,假設您已實作通訊協定處理常式, (myPH) 來處理自訂應用程式的 *.myext 類型檔案。 所有這些檔案都會位於本機電腦上的 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. 針對 「SystemIndex」 呼叫 ISearchManager::GetCatalog 以取得 ISearchCatalogManager 介面的實例。
  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會告訴搜尋引擎有關要編目和/或watch的容器,以及要包含或排除這些容器下的專案。 若要新增搜尋根目錄,請具現化 ISearchRoot 物件、設定根屬性,然後呼叫 ISearchCrawlScopeManager::AddRoot 並將指標傳遞給 ISearchRoot 物件。 搜尋根 URL 的格式與稍早所述的搜尋根目錄相同。

下表描述 ISearchRoot的相關 put 方法;Windows 搜尋目前不會使用介面的其他 put 方法。 我們建議在所有根目錄中包含使用者的安全性識別碼 (SID) ,以提高安全性。 個別使用者根目錄在個別使用者進程中執行時更安全,例如,確保某個使用者看不到從其他使用者收件匣編制索引的專案。

方法 Description
put_ProvidesNotifications 如果通訊協定處理常式或其他應用程式會通知搜尋引擎有關搜尋根目錄下 URL 的變更,請將 設定為 TRUE 。 通知表示 URL 需要重新編制索引。
put_RootURL 設定目前搜尋的根 URL。 URL 採用稍早所述的搜尋根表單。

 

 

根據預設,當您新增搜尋根目錄時,索引子不會編目範圍。 您也必須為根目錄新增包含規則。 如果您想要為應用程式新增使用者特定的根目錄,該應用程式應該在應用程式啟動時為新使用者新增適當的根目錄。

若要為新使用者新增適當的根目錄:

  1. 取得使用者的 SID。
  2. 列舉所有根目錄,以檢查是否有此 SID 存在。
  3. 如有必要,請使用 SID 新增根目錄。

 

從編目範圍移除根目錄

當您不想再編制該 URL 索引時,您可以使用 ISearchCrawlScopeManager 從編目範圍中移除根目錄。 移除根目錄也會刪除該 URL 的所有範圍規則。 例如,假設您想要從系統卸載內容存放區和/或其通訊協定處理常式。 您可以卸載應用程式、移除所有資料,然後從編目範圍中移除搜尋根目錄,而編目範圍管理員將會移除根目錄和與根目錄相關聯的所有範圍規則。

若要移除現有的搜尋根目錄,請使用您想要移除的搜尋根目錄呼叫 ISearchCrawlScopeManager::RemoveRoot 。 搜尋根 URL 的格式與稍早所述的搜尋根目錄相同。 如果找不到根目錄,則這個方法會傳回S_FALSE,如果移除找到的根目錄時發生錯誤碼,則傳回錯誤碼。

移除搜尋根目錄也會從 Windows 搜尋選項的使用者介面中移除 URL,因此使用者可能無法使用使用者介面重新新增該容器或位置。 您也可以移除搜尋根目錄的所有使用者集覆寫,並還原為原始搜尋根目錄和範圍規則。 如需詳細資訊,請參閱 管理範圍規則

注意

在 Windows Vista 上,如果使用者透過 主控台 中的使用者設定檔移除,CSM 會移除其 SID 的所有規則和根目錄,並從目錄中移除其索引項目目。 在 Windows XP 上,您必須手動移除使用者的根目錄和規則。

 

 

列舉編目範圍中的根目錄

CSM 會使用標準 COM 樣式列舉值介面 IEnumSearchRoots列舉搜尋根目錄。 您可以使用這個介面來列舉搜尋根目錄,以取得許多用途。 例如,您可能想要在使用者介面中顯示整個編目範圍,或探索特定根目錄或根的子系是否已經在編目範圍中。

 

參考

ISearchCrawlScopeManager

ISearchRoot

IEnumSearchRoots

概念

使用編目範圍管理員

管理範圍規則