Benachrichtigen des Index der Änderungen (Windows-Suche)

Mithilfe der Benachrichtigungs-APIs können Komponenten den Indexer benachrichtigen, dass ein Element geändert, verschoben oder gelöscht wurde, und der Warteschlange von URLs des Windows Search-Indexers, die eine Indizierung erfordern, Suchbereiche hinzufügen.

Komponenten können den Windows Search-Indexer benachrichtigen, dass sich die Daten in ihrem Speicher geändert haben. In der Regel können Sie sich auf die geplanten Durchforstungen des Indexers verlassen. Die Bereitstellung von Benachrichtigungen für den Indexer kann jedoch die Leistung verbessern, indem sichergestellt wird, dass der Indexer nicht den gesamten Speicher auf inkrementellen Indizes durchforstet. Dies kann beispielsweise empfohlen werden, wenn Sie erwarten, dass Ihr Datenspeicher außergewöhnlich groß und/oder sehr ausgelastet ist, z. B. ein E-Mail-Datenspeicher.

Implementieren von indexerseitig verwalteten Benachrichtigungen

Mit indexerverwalteten Benachrichtigungen können Sie den Zugriff auf Ihren Datenspeicher steuern und gleichzeitig die Benachrichtigungswarteschlange während des gesamten Indizierungsprozesses beibehalten. Ihr Benachrichtigungsanbieter muss Änderungen am Datenspeicher überwachen und eine Benachrichtigungswarteschlange erstellen. In regelmäßigen Abständen sendet Ihr Anbieter einen Batch von Änderungsbenachrichtigungen an den Indexer. Wenn der Indexer Ihre Benachrichtigungen empfängt, gibt er eine Bestätigung zurück, und Sie können die Elemente aus Ihrer Warteschlange entfernen. Wenn Sie nach einem bestimmten Zeitraum keine Bestätigung erhalten, können Sie die Benachrichtigungen erneut senden. Im Falle eines Fehlers erstellt der Indexer seine interne Warteschlange von Elementen neu, um sie zu durchforsten, oder führt eine inkrementelle Durchforstung des Speichers durch.

Um vom Indexer verwaltete Benachrichtigungen zu implementieren, müssen Sie Folgendes implementieren:

Benachrichtigungswarteschlange

Sie müssen jede Änderung in Ihrem Datenspeicher überwachen und in die Warteschlange stellen, um sie als Benachrichtigung an den Indexer zu senden. Wie viele Benachrichtigungen Sie in die Warteschlange stellen und wie häufig Sie sie an den Indexer senden, hängt von Ihren Umständen ab. Vielleicht senden Sie einen Batch von Benachrichtigungen für jede n Anzahl von Änderungen oder nach einem bestimmten Zeitintervall oder eine Kombination aus beiden.

Der Indexer erwartet, dass die Benachrichtigungen in einem Array von SEARCH_ITEM_PERSISTENT_CHANGE Strukturen enthalten sind, sodass Sie ihre Warteschlange auf ähnliche Weise implementieren können.

ISearchPersistentItemsChangedSink

Um auf diese Schnittstelle zuzugreifen, instanziieren Sie zunächst ein ISearchManager-Objekt , um Zugriff auf ein ISearchCatalogManager-Objekt zu erhalten. Von diesem ISearchCatalogManager-Objekt aus instanziieren Sie ein ISearchPersistentItemsChangedSink-Objekt und benachrichtigen den Indexer über die Datenänderungen mit einem Aufruf der OnItemsChanged-Methode .

Im Aufruf dieser Methode schließen Sie die Anzahl der gemeldeten Änderungen und ein Array von SEARCH_ITEM_PERSISTENT_CHANGE Strukturen ein. Sie erhalten ein Array von HR-Vervollständigungscodes zurück, die angeben, ob jede URL für die Indizierung akzeptiert wurde. Dies ist Ihre Bestätigung vom Indexer.

Implementieren von vom Anbieter verwalteten Benachrichtigungen

Mit vom Anbieter verwalteten Benachrichtigungen können Sie den Zugriff auf Ihren Datenspeicher steuern und den Fortschritt des Indexers überwachen, während er den Windows Search-Katalog aktualisiert. Ihr Anbieter muss Änderungen am Datenspeicher überwachen und eine Benachrichtigungswarteschlange erstellen. In regelmäßigen Abständen sendet Ihr Anbieter einen Batch von Änderungsbenachrichtigungen an den Indexer. Wenn der Indexer Ihre Benachrichtigungen empfängt, gibt er eine Bestätigung zurück. Wenn Sie nach einem bestimmten Zeitraum keine Bestätigung erhalten, können Sie die Benachrichtigungen erneut senden. Während der Indexer den Datenspeicher durchforstet und den Windows Search-Katalog aktualisiert, benachrichtigt er Ihren Anbieter über jedes Katalogupdate, und Sie können die Elemente aus Ihrer Warteschlange entfernen. Ihr Anbieter verwaltet seine Benachrichtigungswarteschlange während dieses Prozesses, sodass Sie im Falle eines Fehlers Benachrichtigungen erneut an den Indexer senden können.

Um vom Anbieter verwaltete Benachrichtigungen zu implementieren, müssen Sie Folgendes implementieren:

Benachrichtigungswarteschlange

Sie müssen jede Änderung in Ihrem Datenspeicher überwachen und in die Warteschlange stellen, um sie als Benachrichtigung an den Indexer zu senden. Wie viele Benachrichtigungen Sie in die Warteschlange stellen und wie häufig Sie sie an den Indexer senden, hängt von Ihren Umständen ab. Vielleicht senden Sie einen Batch von Benachrichtigungen für jede n Anzahl von Änderungen oder nach einem bestimmten Zeitintervall oder eine Kombination aus beiden.

Der Indexer erwartet, dass die Benachrichtigungen in einem Array von SEARCH_ITEM_CHANGE-Strukturen enthalten sind, sodass Sie Änderungsinformationen auf ähnliche Weise speichern können. Sie müssen jedoch auch in der Lage sein, die gesendeten Benachrichtigungen mit den vom Indexer zurückgegebenen Bestätigungen und Updates abzugleichen. Möglicherweise möchten Sie auch erkennen, wie lange es dauert, Bestätigungen zu erhalten, damit Sie entscheiden können, ob/wann Benachrichtigungen erneut senden werden.

ISearchItemsChangedSink

Um auf diese Schnittstelle zuzugreifen, instanziieren Sie zunächst ein ISearchManager-Objekt , um Zugriff auf ein ISearchCatalogManager-Objekt zu erhalten. Von diesem ISearchCatalogManager-Objekt aus instanziieren Sie ein ISearchItemsChangedSink-Objekt und benachrichtigen den Indexer über die Datenänderungen mit einem Aufruf der OnItemsChanged-Methode .

Im Aufruf dieser Methode schließen Sie die Anzahl der gemeldeten Änderungen und ein Array von SEARCH_ITEM_CHANGE Strukturen ein. Sie erhalten ein Array von vom Indexer zugewiesenen DocIds, die jede Änderung darstellen, sowie ein Array von HR-Vervollständigungscodes, die angeben, ob jede URL für die Indizierung akzeptiert wurde. Dies ist Ihre Bestätigung vom Indexer, dass er Ihre Benachrichtigungen erhalten hat und die Indizierung der Elemente vorbereitet.

Ab diesem Zeitpunkt sendet der Indexer Updates über die ISearchNotifyInlineSite-Schnittstelle .

ISearchNotifyInlineSite

Um Updates über die status Ihrer Elemente und des Katalogs zu erhalten, müssen Sie Ihre ISearchNotifyInlineSite-Schnittstelle beim Indexer registrieren, damit Sie Rückrufe senden können. Jedes mit ISearchNotifyInlineSite::OnItemIndexedStatusChange gesendete Update identifiziert die Elemente nach DocId, den status jedes Elements (SEARCH_ITEM_INDEXING_STATUS) und die Indizierungsphase (SEARCH_INDEXING_PHASE), in der sich die Elemente befinden.

Sie erhalten nicht nur Updates zu den status jedes Elements, wie zuvor beschrieben, sie erhalten auch wichtige Informationen über die status des Katalogs selbst. Die Windows-Suchdienst kann vom Endbenutzer, einer Drittanbieteranwendung oder einem anderen Fehler unterbrochen oder neu gestartet werden. In diesem Fall benötigen Sie eine Möglichkeit, zu bestimmen, welche Benachrichtigungen an den Indexer erneut erfolgen sollen.

Die ISearchNotifyInlineSite::OnCatalogStatusChange-Methode, die vom Windows-Suchdienst aufgerufen wird, informiert Clients mithilfe der in der folgenden Tabelle beschriebenen Parameter über die status des Katalogs.

Parameter BESCHREIBUNG
guidCatalogResetSignature Eine GUID, die das Zurücksetzen des Katalogs darstellt. Wenn sich diese GUID ändert, müssen alle Benachrichtigungen erneut angezeigt werden.
guidCheckPointSignature Eine GUID, die den letzten wiederhergestellten Prüfpunkt darstellt. Wenn sich diese GUID ändert, müssen alle Benachrichtigungen, die seit dem letzten gespeicherten Prüfpunkt gesammelt wurden, erneut ausgewechselt werden.
dwLastCheckPointNumber Eine Zahl, die den zuletzt gespeicherten Prüfpunkt angibt.

 

 

Wenn ein Katalogprüfpunkt auftritt, aktualisiert der Suchdienst dwLastCheckPointNumber, und alle vor diesem Prüfpunkt gesendeten Benachrichtigungen sind im Falle eines Dienstausfalls sicher und wiederherstellbar. Benachrichtigungsanbieter müssen nur die Benachrichtigungen nachverfolgen, die zwischen Prüfpunkten und repush gesendet werden, wenn der Katalog wiederhergestellt oder zurückgesetzt wird.

Wenn eine Katalogwiederherstellung erfolgt, führt der Suchdienst ein Rollback des Katalogs auf den zuletzt gespeicherten Prüfpunkt durch und aktualisiert guidCheckPointSignature. In diesem Fall müssen Benachrichtigungsanbieter alle Benachrichtigungen erneut senden, die seit dem zuletzt gespeicherten Prüfpunkt gesammelt wurden, wie durch dwLastCheckPointNumber identifiziert.

Wenn eine Katalogzurücksetzung erfolgen sollte, setzt der Suchdienst den gesamten Katalog zurück und aktualisiert guidCatalogResetSignature. Der Benachrichtigungsanbieter muss seinen gesamten Durchforstungsbereich erneut anstoßen.

Zusätzliche Ressourcen

Konzept

Entwickeln von Protokollhandlern

Grundlegendes zu Protokollhandlern

Hinzufügen von Symbolen und Kontextmenüs

Codebeispiel: Shellerweiterungen für Protokollhandler

Installieren und Registrieren von Protokollhandlern

Erstellen eines Suchconnectors für einen Protokollhandler

Debuggen von Protokollhandlern