Freigeben über


Benachrichtigen des Indexes von Änderungen (Windows Search)

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

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 Indizierungen des Indexers verlassen. Das Bereitstellen von Benachrichtigungen an den Indexer kann jedoch die Leistung verbessern, indem sichergestellt wird, dass der Indexer den gesamten Speicher nicht für inkrementelle Indizes durchforstet. Dies kann beispielsweise empfohlen werden, wenn Sie erwarten, dass Ihr Datenspeicher außergewöhnlich groß und/oder außergewöhnlich ausgelastet ist, z. B. ein E-Mail-Datenspeicher.

Implementieren von vom Indexer verwalteten Benachrichtigungen

Durch vom Indexer verwaltete Benachrichtigungen können Sie den Zugriff auf Ihren Datenspeicher steuern und werden gleichzeitig von der Aufgabe entlastet, die Benachrichtigungswarteschlange während des gesamten Indizierungsprozesses zu pflegen. Ihr Benachrichtigungsanbieter muss Änderungen am Datenspeicher überwachen und eine Benachrichtigungswarteschlange erstellen. In regelmäßigen Abständen sendet Ihr Anbieter eine Reihe von Änderungsbenachrichtigungen an den Indexer. Wenn der Indexer Ihre Benachrichtigungen empfängt, wird eine Bestätigung zurückgegeben, 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 baut der Indexer seine interne Warteschlange von Elementen neu auf, um sie zu durchsuchen oder führt eine inkrementelle Durchsuchung des Speichers durch.

Um indizierungsverwaltete 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 Ihrem Umstand ab. Vielleicht senden Sie eine Reihe von Benachrichtigungen für jede n Anzahl von Änderungen oder nach einem bestimmten Zeitintervall oder eine Kombination der beiden.

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

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 instanziieren Sie ein ISearchPersistentItemsChangedSink-Objekt und benachrichtigen den Indexer der 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-Abschlusscodes zurück, das angibt, 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 der Windows Search-Katalog aktualisiert wird. Ihr Anbieter muss Änderungen am Datenspeicher überwachen und eine Benachrichtigungswarteschlange erstellen. In regelmäßigen Abständen sendet Ihr Anbieter eine Reihe von Änderungsbenachrichtigungen an den Indexer. Wenn der Indexer Ihre Benachrichtigungen empfängt, wird eine Bestätigung zurückgegeben. Wenn Sie nach einem bestimmten Zeitraum keine Bestätigung erhalten, können Sie die Benachrichtigungen erneut senden. Wenn der Indexer den Datenspeicher durchforstet und den Windows Search-Katalog aktualisiert, benachrichtigt er Ihren Anbieter jedes Katalogupdates, und Sie können die Elemente aus der Warteschlange entfernen. Ihr Anbieter verwaltet seine Benachrichtigungswarteschlange während dieses Prozesses, sodass Sie im Falle eines Fehlers Benachrichtigungen an den Indexer erneut 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 Ihrem Umstand ab. Vielleicht senden Sie eine Reihe von Benachrichtigungen für jede n Anzahl von Änderungen oder nach einem bestimmten Zeitintervall oder eine Kombination der beiden.

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

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 instanziieren Sie ein ISearchItemsChangedSink-Objekt und benachrichtigen den Indexer der 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 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 sie Ihre Benachrichtigungen erhalten hat und die Indizierung der Elemente vorbereitet.

Ab diesem Zeitpunkt sendet der Indexer Updates mithilfe der ISearchNotifyInlineSite-Schnittstelle .

ISearchNotifyInlineSite

Um Aktualisierungen über den Status Ihrer Elemente und des Katalogs zu erhalten, müssen Sie Ihre ISearchNotifyInlineSite-Schnittstelle beim Indexer registrieren, damit Sie Rückrufe senden können. Jede Aktualisierung, die mithilfe von ISearchNotifyInlineSite::OnItemIndexedStatusChange gesendet wird, 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 Aktualisierungen über den Status jedes Elements, wie zuvor beschrieben, auch wichtige Informationen zum Status des Katalogs selbst. Der 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, um zu bestimmen, welche Benachrichtigungen an den Indexer erneut gesendet werden sollen.

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

Parameter Description
guidCatalogResetSignature Eine GUID, die die Katalogzurücksetzung darstellt. Wenn sich diese GUID ändert, müssen alle Benachrichtigungen erneut gesendet 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 gesendet werden.
dwLastCheckPointNumber Eine Zahl, die den letzten gespeicherten Prüfpunkt angibt.

 

 

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

Wenn ein Katalog wiederhergestellt wird, setzt der Suchdienst den Katalog auf den letzten gespeicherten Prüfpunkt zurück und aktualisiert die guidCheckPointSignature. In dieser Situation müssen Benachrichtigungsdienstanbieter alle Benachrichtigungen erneut senden, die seit dem zuletzt gespeicherten Prüfpunkt gesammelt wurden, der durch dwLastCheckPointNumber identifiziert wurde.

Falls ein Katalogreset erforderlich ist, setzt der Suchdienst den gesamten Katalog zurück und aktualisiert die guidCatalogResetSignature. Der Benachrichtigungsanbieter muss den gesamten Crawl-Bereich erneut wiederholen.

Weitere Ressourcen

Konzeptionelle

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