Grundlegendes zu Protokollhandlern
Einige Anwendungen speichern ihre Elemente in Datenbanken oder benutzerdefinierten Dateitypen. Während Windows Search den Namen und die Eigenschaften der Datei indizieren kann, hat Windows keine Kenntnis des Inhalts der Datei. Daher können solche Elemente nicht in der Windows Shell indiziert oder verfügbar gemacht werden. Indem Sie einen Protokollhandler erstellen, können Sie diese Elemente für die Indizierung verfügbar machen. Sie können auch ein Verbunddateiformat indizieren, z. B. eine .zip Datei.
Dieses Thema ist wie folgt organisiert:
- Indizieren von Datenspeichern mit Protokollhandlern
- Indizieren eines Verbunddateiformats
- Zugehörige Themen
Indizieren von Datenspeichern mit Protokollhandlern
Wenn Benutzer Legacydatenbanken, E-Mail-Speicher oder andere Datenstrukturen durchsuchen müssen, die von Windows Search nicht unterstützt werden, sollten Sie zunächst ermitteln, ob bereits ein Protokollhandler für diesen Datenspeicher vorhanden ist, z. B. für die Verwendung mit einer anderen Anwendung wie SharePoint Server. Wenn ja, können Sie diesen Protokollhandler auf dem System installieren. Windows Suchprotokollhandler verwenden Entwurfsspezifikationen, die SharePoint Server ähneln, und sie können häufig austauschbar verwendet werden.
Weitere Informationen zur Bereitstellung von Search Server 2008 mit Office SharePoint Server 2007 finden Sie unter [ Suchserver 2008 ] der Verbundsuche.
Shell-Datenspeicher
Bevor ein Drittanbieter von neuen Dateiformaten und Datenspeichern diese Formate und Speicher abrufen kann, die in Abfrageergebnissen in Windows Explorer angezeigt werden sollen, muss der Entwickler eine Shell-Datenquelle implementieren. Eine Shell-Datenquelle ist eine Komponente, die verwendet wird, um den Shellnamespace zu erweitern und Elemente in einem Datenspeicher verfügbar zu machen. Ein Datenspeicher ist ein Repository von Daten. Ein Datenspeicher kann für das Shell-Programmiermodell als Container verfügbar gemacht werden, der eine Shell-Datenquelle verwendet. Die Elemente in einem Datenspeicher können vom Windows Search-System mithilfe eines Protokollhandlers indiziert werden. Der Protokollhandler implementiert das Protokoll für den Zugriff auf eine Inhaltsquelle im systemeigenen Format. Die Schnittstellen ISearchProtocol und ISearchProtocol2 werden verwendet, um einen benutzerdefinierten Protokollhandler zu implementieren, um die Datenquellen zu erweitern, die indiziert werden können.
Wenn die Abfrageergebnisse in Windows Explorer angezeigt werden sollen, müssen Sie eine Shell-Datenquelle implementieren, bevor Sie einen Protokollhandler erstellen können, um den Index zu erweitern. Wenn jedoch alle Abfragen programmatisch sind (z.B. über OLE DB) und nicht vom Shell-Code der Anwendung interpretiert werden, ist ein Shellnamespace, der weiterhin bevorzugt wird, nicht unbedingt erforderlich.
Hinweis
Eine Shell-Datenquelle wird manchmal als Shellnamespaceerweiterung bezeichnet. Ein Handler wird manchmal als Shellerweiterung oder Shellerweiterungshandler bezeichnet.
Wenn Sie möchten, dass Benutzer ihre Suchergebnisse in Windows Explorer anzeigen, müssen Sie einen Protokollhandler und mindestens eines der folgenden Add-Ins erstellen:
- Kontextmenühandler
- Symbolhandler
- Eine andere Art von Dateihandler
Eine Liste der Handler, die durch das Entwicklerszenario identifiziert werden, das Sie erreichen möchten, finden Sie unter "Übersicht über Handler" in Windows Suchen als Entwicklungsplattform. Informationen zum Erstellen von Handlern finden Sie unter Registrieren von Shellerweiterungen, Kontextmenüund Dateityphandlern.
Protokollhandler
Wenn der Datenspeicher auch ein Container (z. B. ein Dateisystemordner) ist, müssen Sie einen Filter implementieren, um die URLs im Container aufzulisten. Wenn der Datenspeicher andere Daten- oder Dateitypen als einen der 200 Dateitypen enthält, die von Windows Search unterstützt werden, müssen Sie einen Filter implementieren, um auf den Inhalt von Elementen im Speicher zuzugreifen und diese zu indiziert. Windows Die Suche verwendet Protokollhandler und IFilter-Technologie ähnlich der von SharePoint Server verwendeten Technologie. Wenn Sie bereits Filter für einen bestimmten Speicher und Dateityp auf dem zu indizierten System installiert haben, kann Windows Search die vorhandenen Schnittstellen verwenden, um diese Daten zu indizieren.
Eine Übersicht über den Indizierungsprozess finden Sie unter Der Indizierungsprozess. Konzeptionelle Informationen zu Filterhandlern finden Sie unter Entwickeln von Filterhandlern.
Filter und Protokollhandler
Protokollhandler gewähren dem Windows Search-Indexer Zugriff auf Datenspeicher, sodass der Indexer die Knoten eines Datenspeichers durchforsten und relevante Informationen für den Index extrahieren kann. Windows Die Suche enthält z. B. Protokollhandler für Dateisystemspeicher und für einige Versionen von microsoft Outlook Datenspeichern. Beim Indizieren Outlook E-Mail durchforstet der Protokollhandler alle Nachrichten in einem Satz von Outlook Ordnern und extrahiert Informationen aus jeder Nachricht und Anlage. Diese Informationen werden zur Aufnahme in den Windows Search-Katalog an den Indexer übergeben.
Übersichten zum Katalog-Manager und Durchforstungsbereich-Manager (CSM) finden Sie unter Verwenden des Katalog-Managers und Verwenden des Durchforstungsbereich-Manager.
Indizieren eines Verbunddateiformats
Ein Verbunddateiformat kann indiziert werden, sodass einzelne Elemente in der Datei als einzelne Ergebnisse zurückgegeben werden können. Ein Verbunddateiformat, z. B. eine komprimierte Datei mit einer .zip Dateinamenerweiterung, ist im Wesentlichen ein Datenspeicher und kann zu Indizierungszwecken als solche behandelt werden. Im folgenden Beispiel wird eine .zip-Datei im Dateisystemnamespace (FILE://c:/test/test.zip) angezeigt, in dem sich sowohl Unterordner als auch einzelne Elemente befinden.
Test.zip
|-folder1
| |-folder2
| |- FileX.txt
|- FileY.doc
Der FILE-Protokollhandler ermittelt, wenn FILE://c:/test/test.zip Änderungen durch Überwachung von Dateisystemänderungsprotokollen vorgenommen hat, und ruft einen IFilter auf, der für .zip Dateien in dieser Datei registriert ist, wenn sich die Datei ändert, aber er hat keine Kenntnis der internen Struktur der .zip Datei selbst.
Sie müssen den Indexer darüber informieren, dass das Verbunddateiformat ein Datenspeicher ist. Dies ist erforderlich, damit einzelne Elemente indiziert und als eindeutige Entitäten abgerufen werden. Nachdem Sie eine Shell-Datenquelle implementiert und die folgenden Schritte ausgeführt haben, verfügen Sie über einen Protokollhandler, der die Daten in einem Verbunddateiformat (einer .zip datei) als einzelne Elemente verarbeiten und verfügbar machen kann.
So informieren Sie den Indexer, dass eine Verbunddatei ein Datenspeicher ist:
Erstellen Sie einen Protokollhandler (mit ISearchProtocol oder ISearchProtocol2)für .zip Dateien, die an die Quelldatei gebunden werden können. Weitere Informationen finden Sie unter Installieren und Registrieren von Protokollhandlern.
Sie können z. B. einen Mit Escapepfad zur .zip-Datei als Stammordnernamen verwenden und dann eine Hierarchiesyntax wie jedes andere Dateiformat verwenden.
.zip:///escapedPathTo.zipFile/.zipfolder/.../.zipfileMithilfe der obigen Beispieldaten für c: testtest.zip würden \ \ die eindeutigen URLs wie folgt aussehen. Mit diesen URLs verfügt der Protokollhandler über die erforderlichen Informationen, um eine Bindung an die .zip-Datei durchzuführen und die untergeordneten URLs einschließlich der inneren Dateien aufzulisten, sodass sie an die .doc und .txt Filter gebunden und indiziert werden können.
.zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/ .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/FileY.Doc .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/folder1 .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/folder1/folder2 .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/folder1/folder2/FileX.txtStellen Sie sicher, dass Ihr Protokollhandler die folgenden beiden Bedingungen erfüllt:
- Die Stamm-URLs für eine .zip-Datei sollten PKEY _ Search _ IsClosedDirectory (System.Search.IsClosedDirectory) für die URLs ausgeben, die die Stamm-.zip-Datei-URLs sind. Beispielsweise sollte .zip:///FILE:%2f%2f%2fc:%2ftest%2ftest.zip/ IsClosedDirectory = TRUE ausgeben. Dadurch wird dem Indexer mitgeteilt, dass keine der untergeordneten URLs verarbeitet werden muss, wenn sich das Datum für diese URL nicht geändert hat.
- Jede untergeordnete URL für diese URL sollte PKEY _ Search _ IsFullyContained (System.Search.IsFullyContained) für die untergeordneten URLs der Stamm-.zip-URL ausgeben. Normalerweise behandelt der Indexer am Ende einer inkrementellen Durchforstung alle nicht überwachten URLs als Elemente, die gelöscht werden sollen. Die Stammdatei .zip sollte jedoch keine Stamm-URLs verarbeiten, da sich nichts geändert hat. Wenn diese Eigenschaft als TRUE ausgegeben wird, weist der Indexer an, dass diese URL nicht gelöscht werden soll, wenn sie am Ende einer inkrementellen Durchforstung nicht verarbeitet wurde. Es wird nur gelöscht, wenn das Stammelement geändert wurde und es nicht besucht wird.
Windows Die Suche erfordert eine Startseite für ein Protokoll, um zu wissen, welche URLs inkrementell durchforstet werden sollen und welche URLs ignoriert werden sollen, wenn sie gefunden werden. Wir können jedoch nicht mit einer URL für jede .zip Datei beginnen, da wir nicht wissen, wo sich jede .zip Datei befindet. Daher muss die Startseiten-URL des .zip-Protokollhandlers in der Lage sein, alles im Stammverzeichnis der Mit Escapepfade aller .zip-Dateien aufzuzählen. Diese .zip Dateien befinden sich nicht unbedingt im FILE:-Namespace und können eine MAPI-Typ-URL sein, die beispielsweise auf eine .zip Datei als Anlage verweist.
So registrieren Sie einen Stamm als Startseite:
Registrieren Sie einen Stamm wie .zip:/// als Startseite, damit alle .zip Dateien dort beginnen. Bei der Verarbeitung der Stamm-.zip: URL sollte Ihr Protokollhandler die Liste der auszugebenden untergeordneten URLs generieren, indem er Windows Suchen nach allen URLs mit System.FileExtension = ".zip" abfragt.
Escapen Sie diese URLs, um die Schrägstriche zu entfernen und als untergeordnete URLs zurückzugeben. Eine Beispielabfrage zum Abrufen der gewünschten Typen könnte wie folgt aussehen.
SELECT system.itemurl, System.DateModified FROM SystemIndex WHERE System.FileExtension='.zip' OR System.MimeType='mimetypefor.zip'Wenn Windows Search in regelmäßigen Abständen eine inkrementelle Durchforstung für Ihre .zip:///-Stamm-URL durchsucht, müssen Sie die Liste der URLs wiedergeben, die Windows Search bereits verwaltet, die .zip URLs sind. Wenn ein Löschvorgang im systemeigenen Speicher erkannt wird, in dem die .zip-Datei gespeichert ist, wird sie nicht in Ihrer Enumeration angezeigt, und dieser Branch der Struktur im .zip wird entfernt.
Um an die .zip Daten für einen anderen Protokollhandler zu binden, sollten Sie idealerweise den IShellFolder für diese URL durchlaufen, um eine Bindung an den Speicher des Objekts zu erstellen, und nicht davon ausgehen, dass es sich immer um eine Datei handelt. Dies bietet Ihnen beispielsweise die Flexibilität, mit Anlagen in E-Mail-Speichern zu arbeiten.
Wenn Sie untergeordnete URLs für jede .zip Datei ausgeben, sollten Sie PKEY _ Search _ UrlToIndexWithModificationTime (System.Search.UrlToIndexWithModificationTime) verwenden, um PKEY _ DateModified (System.DateModified) der tatsächlichen .zip-Datei zu übergeben, sodass der Indexer die .zip Datei nur durchforstet, wenn sie geändert wurde.
Damit Ihre .zip URLs sofort nach der Erstellung oder Änderung indiziert werden und nicht auf eine inkrementelle Durchforstung warten müssen, um ihren neuen Zustand zu ermitteln, können Sie das Dateisystem möglicherweise selbst auf .zip Dateiänderungen überwachen. Ein solcher Ansatz funktioniert jedoch nicht für andere Datenspeicher wie MAPI.
So lassen Sie Ihre .zip-URLs beim Erstellen oder Ändern indiziert werden:
- Erstellen Sie einen Filter (und die Implementierung der IFilter-Schnittstelle) für den .zip Dateityp. Weitere Informationen finden Sie unter Developing Property Handlers for Windows Search.
- Wenn Ihre IFilter-Implementierung aufgerufen wird, liegt dies daran, dass diese URL ermittelt oder geändert wurde. Generieren Sie dann über die IGatherNotifyInline-Schnittstelle ein Ereignis für die .zip URL, die für die Quell-URL geeignet ist. Auf diese Weise können Sie dem Indexer sofort mitteilen, dass neue Daten indiziert werden müssen, ohne auf die inkrementelle Durchforstung warten zu müssen.