Share via


通知 Windows 搜尋) (變更的索引

藉由使用通知 API 元件,可以通知索引子專案已變更、移動或刪除,而且可以將搜尋範圍新增至需要編制索引的 Windows 搜尋索引子 URL 佇列。

元件可以通知 Windows 搜尋服務索引子其存放區中的資料已變更。 一般而言,您可以依賴索引子的排程編目。 不過,提供通知給索引子可藉由確保索引子不會在累加式索引上編目整個存放區,以改善效能。 例如,如果您預期資料存放區非常大且/或非常忙碌,例如電子郵件資料存放區,建議您這麼做。

實作索引子管理的通知

索引子管理的通知可讓您控制對資料存放區的存取,同時釋放在整個索引處理過程中維護通知佇列。 您的通知提供者必須監視資料存放區的變更,並建立通知佇列。 您的提供者會定期將變更通知批次傳送至索引子。 當索引子收到通知時,它會傳回通知,而且您可以從佇列中移除專案 () 。 如果在一段時間後未收到通知,您可以重新傳送通知。 如果失敗,索引子會重建其內部專案佇列,以編目或執行存放區的累加編目。

若要實作索引子管理的通知,您需要實作下列專案:

通知佇列

您必須監視資料存放區中的每個變更並排入佇列,以傳送至索引子作為通知。 您排入佇列的通知數目,以及傳送給索引子的頻率取決於您的情況。 或許您會針對每 n 個變更數目或在一些 t 時間間隔之後,或兩者的組合傳送一批通知。

索引子預期通知會出現在 SEARCH_ITEM_PERSISTENT_CHANGE 結構的陣列中,因此您可以選擇以類似的方式實作佇列。

ISearchPersistentItemsChangedSink

若要存取此介面,您必須先具現化 ISearchManager 物件,以存取 ISearchCatalogManager 物件。 從該 ISearchCatalogManager 物件中,您會具現化 ISearchPersistentItemsChangedSink 物件,並使用對 OnItemsChanged 方法的呼叫通知索引子資料變更。

在呼叫此方法時,您會包含所報告的變更數目,以及 SEARCH_ITEM_PERSISTENT_CHANGE 結構的陣列。 您會取得 HR 完成代碼陣列,指出是否已接受每個 URL 進行編制索引。 這是來自索引子的通知。

實作提供者管理的通知

提供者管理的通知可讓您控制對資料存放區的存取,以及在更新 Windows 搜尋服務類別目錄時監視索引子的進度。 您的提供者必須監視資料存放區的變更,並建立通知佇列。 您的提供者會定期將變更通知批次傳送至索引子。 當索引子收到通知時,它會傳回通知。 如果在一段時間後未收到通知,您可以重新傳送通知。 當索引子搜耙資料存放區並更新 Windows 搜尋服務類別目錄時,它會通知您的每個目錄更新提供者,而且您可以從佇列中移除專案 () 。 您的提供者會在整個程式中維護其通知佇列,以便在失敗時,您可以將通知重新傳送至索引子。

若要實作提供者管理的通知,您需要實作下列專案:

通知佇列

您必須監視資料存放區中的每個變更並排入佇列,以傳送至索引子作為通知。 您排入佇列的通知數目,以及傳送給索引子的頻率取決於您的情況。 或許您會針對每 n 個變更數目或在一些 t 時間間隔之後,或兩者的組合傳送一批通知。

索引子預期通知會出現在 SEARCH_ITEM_CHANGE 結構的陣列中,因此您可以選擇以類似的方式儲存變更資訊。 不過,您也必須能夠比對您傳送的通知與索引子所傳回的通知。 您也可以偵測取得通知所需的時間,以便決定是否/何時重新傳送通知。

ISearchItemsChangedSink

若要存取此介面,您必須先具現化 ISearchManager 物件,以存取 ISearchCatalogManager 物件。 從該 ISearchCatalogManager 物件中,您可以具現化 ISearchItemsChangedSink 物件,並使用對 OnItemsChanged 方法的呼叫通知索引子資料變更。

在呼叫此方法時,您會包含所報告的變更數目,以及 SEARCH_ITEM_CHANGE 結構的陣列。 您會取得索引子指派的 DocId 陣列,代表每個變更,以及 HR 完成代碼陣列,指出是否接受每個 URL 進行編制索引。 這是來自索引子的通知,表示它已收到您的通知,並準備編制專案的索引。

從該時間點轉送索引子會使用 ISearchNotifyInlineSite 介面傳送更新。

ISearchNotifyInlineSite

若要取得專案和目錄狀態的更新,您必須向索引子註冊 ISearchNotifyInlineSite 介面,以便傳送回呼。 每個使用ISearchNotifyInlineSite::OnItemIndexedStatusChange傳送的更新都會依 DocId 識別專案、每個專案的狀態 (SEARCH_ITEM_INDEXING_STATUS) ,以及 (SEARCH_INDEXING_PHASE) 專案的狀態。

您不僅會收到每個專案狀態的更新,如先前所述,您也會取得目錄本身狀態的重要資訊。 Windows 搜尋服務可由終端使用者、協力廠商應用程式或其他失敗中斷或重新開機。 發生這種情況時,您需要一種方式來判斷要重新套用至索引子的通知。

Windows 搜尋服務所呼叫的ISearchNotifyInlineSite::OnCatalogStatusChange方法會使用下表所述的參數通知用戶端目錄的狀態。

參數 描述
guidCatalogResetSignature 表示目錄重設的 GUID。 如果此 GUID 變更,則必須重新傳送所有通知。
guidCheckPointSignature 表示上次還原檢查點的 GUID。 如果此 GUID 變更,則必須重新傳送自上次儲存的檢查點之後累積的所有通知。
dwLastCheckPointNumber 數位,指出最後儲存的檢查點。

 

 

發生類別目錄檢查點時,搜尋服務會更新 dwLastCheckPointNumber,並在發生服務失敗時,在該檢查點之前傳送的所有通知都是安全且可復原的。 如果目錄還原或重設,通知提供者只需要追蹤檢查點與重設點之間傳送的通知。

如果發生目錄還原,搜尋服務會將目錄復原到最後儲存的檢查點,並更新 guidCheckPointSignature。 在此情況下,通知提供者必須重新叫用自 dwLastCheckPointNumber所識別的最新儲存檢查點以來累積的所有通知。

如果應該重設目錄,搜尋服務會重設整個目錄,並更新 guidCatalogResetSignature。 通知提供者必須再次重新覆寫其整個編目範圍。

其他資源

概念

開發通訊協定處理常式

瞭解通訊協定處理常式

新增圖示和操作功能表

程式碼範例:通訊協定處理常式的殼層擴充功能

安裝和註冊通訊協定處理常式

建立通訊協定處理常式的搜尋連接器

偵錯通訊協定處理常式