Ein Objekt senden
mindbreeze.example.cmis.crawler.CmisCrawler
. Diese implementiert die Pluginschnittstelle für Crawler
com.mindbreeze.enterprisesearch.mesapi.crawler.Crawler: public interface Crawler { public void init (Configuration configuration); public void performCrawlRun(FilterAndIndexClient client) throws Exception; public void shutdown(); }
Die init
-Method dient zur Vorbereitung des Crawlers auf die Crawlläufe. Hier können z.B. Datenbankverbindungen aufgebaut werden. Das Gegenstück dazu ist die shutdown
-Methode. Sie wird vor dem Beenden des Crawlers aufgerufen.
performCrawlRun
wird für jeden Crawllauf aufgerufen. Hier werden die Objekte von der Datenquelle indiziert. Der Aufruf
client.filterAndIndex(indexable);
sendet ein Objekt.
Das Indexable
-Objekt dient zur Sammlung der relevanten Daten für ein übermitteltes Objekt. Das folgende minimale Beispiel bereitet ein Objekt für die Indizierung vor:
Indexable indexable = new Indexable(); indexable.setKey("1"); indexable.setTitle("my title");
Für das Objekt wir der key
gesetzt, der Schlüssel für ein Objekt in einer Datenquelle. Der title
setzt den Titel des Objekts.
Sie können jetzt bereits im Mindbreeze Web Client nach dem indizierten Dokument suchen.
Wichtig: Bei der Definition des keys ist zu beachten, dass jeder Crawler für mehrere Datenquellen des Typs konfiguriert werden kann. Dieses Beispiel kann Objekte von CMIS Datenquellen indizieren. Es können mehrere Crawler konfiguriert werden, z.B. für Fabasoft Folio Cloud Österreich und Fabasoft Folio Cloud Deutschland.Damit ein Objekt über Datenquellen hinweg eindeutig identifiziert werden kann, besteht der Schlüssel im Index aus 3 Teilen. Der Art der Datenquelle (Category), der Datenquelle (Category Instance) und dem key. Die Category wird für das Plugin festgelegt. Die Category Instance kann in der Konfigurationsoberfläche eingestellt werden:
Für das Beispiel können sie die Standardeinstellung verwenden. Sie müssen aber beachten, dass beim Anlegen einer weiteren Datenquelle eine andere Category Instance eingestellt wird, da sonst Objekte von z.B. Fabasoft Folio Cloud Österreich die Objekte von Fabasoft Folio Cloud Deutschland überschreiben.
Angezeigtes Datum und Änderungsdatum
Um das angezeigte Datum beim indizierten Objekt zu setzen, verwenden Sie setDate
.
indexable.setDate(cmisDocument.getCreationDate());
Nach diesem Datum wird auch sortiert, falls Sie nach Datum sortieren.
Zusätzlich zum angezeigten Datum gibt es das Änderungsdatum des Dokuments. Dieses Datum wird verwendet um festzustellen, ob sich ein Dokument geändert hat oder nicht.
indexable.setModificationDate(cmisDocument.getLastModificationDate());
Alle Datumswerte müssen in UTC umgerechnet gesendet werden. Nur dadurch ist sichergestellt, dass die Werte korrekt dargestellt werden und es zu keinen Problemen mit unterschiedlichen Zeitzonen oder Sommer- und Winterzeit kommt.
Inhalte und Dateien senden
Im vorigen Abschnitt wurde ein einzelnes Objekt mit Titel und key indiziert. Mindbreeze bietet eine sehr einfache Möglichkeit den Inhalt eines Objekts zu indizieren. Sie haben die Möglichkeit bestehende Dateien direkt zu senden und das Mindbreeze Filter Service sämtliche Inhalte aus den Dokument herausfinden zu lassen. Wichtig sind dafür die Methoden setContent
und setExtension
. An setContent
übergeben Sie die Bytes des Inhalts. Mit setExtension
legen Sie den Dateityp des Inhalts fest. Wenn Sie hier z.B. doc angeben und content die Daten eines Word-Dokuments enthält, findet der Filter automatisch den Inhalt und zusätzliche Information, wie den Autor, heraus.
Sie können aber auch einfach eine Zeichenkette als Inhalt senden.
indexable.setContent("content".getBytes("utf-8")); indexable.setExtension("txt");
Zusammenfassend, der Inhalt eines Objekts wird mit den Eigenschaften content
und extension
festgelegt. In content werden die Daten des Inhalts übertragen. Extension txt bedeutet, dass der Inhalt als Textdokument betrachtet wird.
Alle CMIS-Dokumente indizieren
Das Beispielprojekt durchläuft alle verfügbaren Ordner und ruft für jedes Dokument die Methode buildIndexable
auf. Hier wird ein Indexable-Objekt mit den gewünschten Werten erzeugt.
private Indexable buildIndexable(Document cmisDocument) throws IOException { Indexable indexable = new Indexable(); indexable.setKey(cmisDocument.getId()); indexable.setTitle(cmisDocument.getName()); indexable.setDate(cmisDocument.getCreationDate()); indexable.setModificationDate(cmisDocument.getLastModificationDate()); byte[] content = getContentBytes(cmisDocument.getContentStream()); indexable.setContent(content); String extension = getExtension(cmisDocument); indexable.setExtension(extension); return indexable; }
Die Suche im Mindbreeze Web Client liefert jetzt alle Dokumente des Demo-Benutzers in Fabasoft Folio Cloud.