Konzeption und Realisierung eines - RWTH

Werbung
Konzeption und Realisierung eines
Dokumentenablage- und
–recherchesystems auf Grundlage von
neuen Datenbanktechnologien
– Seminararbeit –
eingereicht von
Felix Remmel
[email protected]
Betreuer
Prof. Dr. Volker Sander
Dr. Winfried Melder-Wolff
12. Dezember 2011
Kurzfassung
Diese Seminararbeit soll die Konzeptionierung und Realisierung eines Dokumentenablageund -recherchesystems vorstellen. Das Konzept stellt die dafür genutzten Technologien vor
und erläutert warum diese genutzt werden. Zusätzlich wird im Konzept beschrieben, wie
die Technologien benutzt werden sollen und in Abhängigkeit voneinander stehen.
Die Umsetzung des Konzepts wird ebenfalls beschrieben. Die relevanten Konfigurationen
werden gezeigt und erklärt, Installationen beschrieben und Probleme die bei der Realisierung aufgefallen sind werden erläutert.
Das Dokumentenablage- und -recherchesystem wird die Möglichkeit bieten, Dokumente
im System benutzer- und rollenbezogen abzuspeichern. Rollen sind die Angestellten, Vorgesetzten und ausgewählte Mitarbeiter des Controllings. Je nach Rolle hat der Benutzer
mehr oder weniger Rechte auf Dokumente zuzugreifen und unterschiedliche Funktionen
um mit ihnen zu arbeiten.
i
ii
Inhaltsverzeichnis
1 Einleitung
1
1.1
Motivation und Ziel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
Vorstudienergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2 Ausgangslage
3
3 Konzept
5
3.1
3.2
Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.1.1
Funktionale Anforderungen an das System . . . . . . . . . . . . . . .
5
3.1.2
Nicht funktionale Anforderungen an das System . . . . . . . . . . .
6
3.1.3
Resümee und benötigte Technologien . . . . . . . . . . . . . . . . . .
6
Auswahl der Technologien . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.2.1
Datenbank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.2.1.1
Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.2.1.2
Überblick über NoSQL Datenbanken
8
3.2.1.3
Gegenüberstellung verschiedener dokumentenorientierter NoSQL Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2.1.4
Solr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2.2
3.2.3
. . . . . . . . . . . .
Art der Anwendung . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2.2.1
Funktionale Anforderungen . . . . . . . . . . . . . . . . . . 13
3.2.2.2
Nicht funktionale Anforderungen . . . . . . . . . . . . . . . 13
3.2.2.3
Gegenüberstellung Website - Desktopanwendung . . . . . . 13
3.2.2.4
Website . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Application Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2.3.1
Jetty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3
Datenbankschema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.4
Prozessabläufe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4.1
Ermittlung von Login Daten der Benutzer . . . . . . . . . . . . . . . 16
iii
3.5
3.4.2
Ermittlung von Angestellten eines Vorgesetzten . . . . . . . . . . . . 16
3.4.3
Ermittlung von Dokumenten eines Angestellten . . . . . . . . . . . . 16
3.4.4
Ermittlung von unbestätigten Dokumenten der Vorgesetzten . . . . 16
3.4.5
Ermittlung der Email-Adresse eines Benutzers . . . . . . . . . . . . 16
3.4.6
Vorgesetzter weist das Dokument eines Angestellten zurück . . . . . 16
3.4.7
Suche nach Text in den Dokumenten . . . . . . . . . . . . . . . . . . 17
Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.5.1
Gesamtarchitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.5.2
Website . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.6
Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.7
Projektplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4 Realisierung
4.1
4.2
21
Solr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.1.1
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.1.2
Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.1.3
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Website . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2.1
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2.2
Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2.3
Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3
Jetty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4
Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.5
Ergebnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5 Fazit und Ausblick
33
Anhang
35
Literatur
41
Abbildungsverzeichnis
43
Tabellenverzeichnis
45
iv
Kapitel 1
Einleitung
1.1
Motivation und Ziel
Atos Worldline benötigt viel Papier und Mannzeit für die Erstellung von internen Berichten. Jeder Mitarbeiter muss z. B. Monatsberichte erfassen, in denen steht, wie viel Stunden
er welcher Tätigkeit nachgegangen ist. Diese Monatsberichte werden jeden Monat von 230
Mitarbeitern angefertigt. Projektmanager müssen zusätzlich Projektmanagementreports
(PMRs) schreiben. All diese Dokumente werden ausgedruckt. Es wird also viel Papier,
das für zehn Jahre archiviert werden muss, verbraucht bei Atos Worldline. Durch hohen Papierverbrauch entstehen Kosten und die Umwelt wird belastet. Der Traum vom
papier- und medienbruchfreien Büro ist Motivation dieser Arbeit. Die Dokumente sollen
nicht mehr ausgedruckt werden, sondern digital signiert und danach gespeichert werden
können.
Das Software-System, das die Speicherung und Recherche in dem Dokumentenarchiv
ermöglicht, soll im Rahmen dieser Seminararbeit entwickelt werden. Diese Seminararbeit
stellt sowohl das Konzept als auch die Realisierung vor.
1.2
Vorstudienergebnisse
In vorlaufenden Analysen wurden die Machbarkeit eines solchen Softwaresystems untersucht.
Die Dokumente müssen eine vom Wirtschaftsprüfer zugelassene digitale Signatur enthalten. Für diesen Zweck wurden Sign Pads angeschafft. Damit ist es möglich, am Computer
Dokumente digital zu unterschreiben. Der Wirtschaftsprüfer akzeptiert diese Unterschrift.
Da im Software-System sehr viele Dokumente gespeichert werden, ist es wichtig, dass das
einzusetzende System auch bei großen Datenmengen den Inhalt der Dokumente schnell
durchsuchen kann. Zusätzlich wurde festgestellt, dass zum Abspeichern von Dokumenten in dem Dokumentenarchivierungs- und -recherchesystem keine komplexen Relationen
benötigt werden. Somit wäre ein herkömmliches relationales Datenbanksystem zu überladen. Dazu kommt, dass relationale Datenbanksystem nicht auf Textsuche in Dokumenten
optimiert sind. Vielmehr bieten sich speziell auf Volltextsuche ausgerichtete NoSQL Datenbanken an, deren hervorragende Eigenschaft es ist, schnell in großen Datenbeständen
Ergebnisse zu finden.
1
2
Kapitel 2
Ausgangslage
Bei Atos Worldline gibt es viele Dokumente, die ohne Unterschrift keine Gültigkeit besitzen. Die meisten dieser Dokumente werden an Computern erstellt und zum Unterschreiben
ausgedruckt. Es gibt interne Dokumente, wie etwa Monatsberichte oder Projektmangamentreports (PMRs), die lange aufbewahrt werden müssen, aber nur in speziellen Situationen gebraucht werden. z. B. muss jeder Mitarbeiter einmal im Monat einen Monatsbericht anfertigen, in dem steht wie viele Stunden er pro Tag an einem bestimmten Projekt
gearbeitet hat (siehe Abbildung 1 Seite 35 für ein Beispiel eines Monatsberichts). Der
Monatsbericht wird am Computer ausgefüllt, ausgedruckt und unterschrieben. Dieser unterschrieben Monatsbericht wird dann dem Vorgesetzten in das Postfach gelegt. Dort wird
er mehrmals unterschrieben und wandert in einen Ordner im Archiv. Darauf zugegriffen wird dann nur noch in Ausnahmesituationen. Dies kann z. B. passieren, wenn bei der
jährlichen Wirtschaftsprüfung Einsicht in einen bestimmten oder ein Bündel Monatsberichte verlangt wird. Diese Auswahl muss dann händisch im Archiv gesucht werden. Es ist
nicht schwer vorstellbar, dass dies eine langweilige und in Zeiten der modernen Technik
eigentlich überflüssige Aufgabe ist. Aber durch die Notwendigkeit einer rechtskonformen
Unterschrift bisher unvermeidbar war.
Ein Mitarbeiter, der auch mein Betreuer – Dr. Winfried Melder-Wolff – dieser Seminararbeit ist, ist bei Atos Worldline im Rahmen eines internen Innovations-Projektes auf
Sign Pads aufmerksam geworden. Sign Pads sind Geräte, mit denen es möglich ist Do-
Abbildung 2.1: Ein Sign Pad
kumente rechtsgültig zu unterschreiben. Das ist möglich, weil das Sign Pad nicht nur ein
Bild der Unterschrift abspeichert, sondern die gesamte Schreibcharakteristik der Unterschrift analysiert und das Ergebnis abspeichert. Durch diese Geräte ist es jetzt möglich
signierte Dokumente auf dem Computer abzuspeichern anstatt diese auszudrucken und zu
unterschreiben. Es würden sich einige Vorteile für die Firma und die Mitarbeiter ergeben:
3
• Ein Schritt Richtung Hin zum papierlosen Büros - Kosteneinsparung, Green-IT,
Innovation
• Durch das papierlose Büro wird auch der Archivraum überflüssig - mehr Platz
• Durch Datenbanktechniken lassen sich die Dokumente leichter finden - Weniger Arbeit
4
Kapitel 3
Konzept
3.1
Anforderungen
Um ein passendes Konzept zu einem IT-System zu erstellen, müssen die Anforderungen
an das System bekannt sein. Auf Grundlage der Anforderungen werde ich die Auswahl von
geeigneten Tools und Frameworks treffen können. Es gibt zwei Arten von Anforderungen,
welche die Auswahl beeinflussen.
• Funktionale Anforderungen – Sie legen fest, was das Produkt tun soll. z. B. ,,Das
Produkt soll alle Dokumente anhand von Stichworten finden können.”
• Nicht funktionale Anforderungen – Darüber werden die Eigenschaften des Produkts
definiert. z. B. ,,Das Produkt soll gesuchte Dokumente innerhalb zwei Sekunden finden können.”
3.1.1
Funktionale Anforderungen an das System
• Das System ist nicht für die Signierung der Dokumente zuständig. Die Dokumente
sind bereits signiert, wenn sie an das System übergeben werden.
• Zugangskontrolle über ein Atos Worldline internes System namens DAS muss eingebunden werden können
• verschiedene Rollen
– User (normaler Angestellter)
∗ Darf Dokumente hochladen
∗ Darf nur seine eigenen Dokumente ansehen und wenn sie vom Vorgesetzten
noch nicht bestätigt wurden bearbeiten und löschen
– supervisor (Vorgesetzter des Angestellten)
∗ Beinhaltet die Rolle des Angestellten
∗ Hat eine Gruppe von Angestellten
∗ Darf die Dokumente seiner Angestellten ansehen und mit einer aktualisierten Version (in der nur die eigene Signatur hinzugefügt wurde) ersetzen
5
∗ Muss von Angestellten hochgeladene Dokumente bestätigen oder zurückweisen. Bei Zurückweisung muss der Angestellte informiert werden.
– admin (z. B. für ausgewählte Mitarbeiter des Controllings)
∗ Beinhaltet die Rolle des Angestellten
∗ Darf alle Dokumente sehen und löschen, aber nicht bearbeiten.
• Es muss eine Rubrik für PMRs und eine für Monatsberichte geben
• Von Angestellten (user) hochgeladene und signierte Monatsberichte müssen auch
vom Vorgesetzten (supervisor) signiert werden bevor sie gültig sind.
• Von Angestellten signierte und hochgeladene PMRs sind sofort gültig
• Volltextsuche in Dokumenten muss möglich sein
• Jedes Dokumente muss dem Angestellten, der es hochgeladen hat, zugeordnet sein
3.1.2
Nicht funktionale Anforderungen an das System
• Suchergebnisse sollen bei 10 GB Daten innerhalb von einer Sekunde verfügbar sein.
• leichte Installation und Nutzbarkeit für den Anwender
• Softwareupdates sollen einfach eingespielt werden können
• neue Dokumententypen sollen einfach in das System integriert werden können
• leichte Bedienbarkeit des Programms für den Anwender
3.1.3
Resümee und benötigte Technologien
Das Dokumentenablage und -recherchesystem muss bei der Ablage und Änderung von
Dokumenten Rechte prüfen, Dokumente in Rubriken unterteilen(PMR und Monatsbericht)
und zudem so programmiert werden, dass es leicht erweiterbar ist, damit in Zukunft neue
Dokumententypen in das System aufgenommen werden können.
Für die Recherche gilt das Selbe wie für die Dokumentenablage, mit dem Unterschied, dass
die Rechte bei der Suche nach Dokumenten beachtet werden müssen. Zusätzlich muss die
Suche performant sein.
Das gesamte System soll für den Anwender leicht zu installieren sein und Änderungen am
System sollen beim Anwender leicht eingespielt werden können.
Das System soll zu Beginn mit zwei verschiedenen Dokumententypen arbeiten können.
• Projektmanagementreports (PMRs)
• Monatsberichten
Ein PMR wird hochgeladen und in der Datenbank gespeichert. Bei einem Monatsbericht
ist ein mehrschrittiger Prozess abzubilden. Bevor ein Dokument vom System als gültiger
Monatsbericht angesehen wird, muss der vom Angestellten hochgeladene Monatsbericht
von dem zugehörigen Vorgesetzten unterschrieben werden und als gültig markiert werden.
6
Der Vorgesetzte hat auch die Möglichkeit, den Monatsbericht als ungültig zu erklären,
womit das Dokument aus dem System gelöscht wird und der Angestellte automatisch per
E-Mail benachrichtigt wird.
In Zukunft sollen noch mehr Dokumententypen vom System unterstützt werden. Daher
muss das System schon jetzt so entwickelt werden, dass es sehr einfach ist, neue Dokumententypen in das System einzugliedern.
Aus diesem Resümee lässt sich schließen, dass es eine Datenbank geben muss, in welcher die Monatsberichte und PMRs mit zusätzlichen Informationen abgespeichert werden
können. Die auszuwählende Datenbank muss auf eine hohe Zugriffsperformance ausgelegt
sein. Konsistenz ist unwichtig, da extrem selten auf Dokumente zugegriffen wird und Inhalte von Dokumenten nicht geändert werden. Der Zugriff auf Dokumente geschieht z. B.
nur bei einer jährlichen Wirtschaftsprüfung. Ein gleichzeitiges Ändern von Dokumenten
passiert nur, wenn ein Vorgesetzter ein Dokument seines Angestellten als ungültig erklärt
und der Angestellte gleichzeitig sein Dokument zurückruft. In diesem Fall würde das Dokument eine Mail vom Software-System bekommen, dass der Vorgesetzte sein Dokument
als ungültig erklärt hat. Dateninkonsistenzen im System entstehen dadurch nicht.
Die Dokumente müssen über mehrere Jahre archiviert werden und vor unerlaubtem Zugriff
geschützt werden. Deshalb ist eine hohe Datensicherheit auch von Bedeutung.
Um dem Anwender des IT-Systems eine Oberfläche anzubieten, sollte eine passende Lösung,
ob Website oder Desktopanwendung, ausgewählt werden. Welche Komponenten mit welcher Begründung ausgewählt werden, soll im folgenden Kapitel erläutert werden.
3.2
Auswahl der Technologien
Nachfolgend werde ich zeigen, welche Technologien für die Realisierung des Systems verwendet werden sollen und warum. Dabei beeinflussen funktionale und nicht funktionale
Anforderungen das Ergebnis der Auswahl. Das soll dazu beitragen, dass die Auswahl objektiv und begründet ist.
3.2.1
Datenbank
Um die Dokumente abzuspeichern ist eine Datenbank sinnvoll. Aus den in Kapitel 3.1
genannten Anforderungen, lassen sich, speziell für die Datenbank geltende, neue Anforderungen ableiten.
3.2.1.1
Anforderungen
Funktionale Anforderungen
• Dokumente müssen abgespeichert werden können
• Einfache Metainformationen zu einem Dokument müssen abgespeichert werden können
– z. B. wem gehört welches Dokument, Art des Dokuments
• Volltextsuche in den Dokumenten muss möglich sein
• Backups müssen möglich sein
7
• Daten müssen aktualisierbar sein
Nicht funktionale Anforderungen
• schnelle Suche garantieren – Suchergebnisse sollen bei 10 GB Daten innerhalb von
einer Sekunde verfügbar sein
• Datenkonsistenz ist zweitrangig, da die Unternehmensinternen Prozesse eine gleichzeitige Bearbeitung von mehreren Dokumenten unwahrscheinlich machen.
• API und/oder Schnittstelle soll vorhanden sein
• neue Dokumententypen sollen einfach in das System integriert werden können
• geringe Kosten des Systems
• Support sollte vorhanden sein. Bei einem Open Source Projekt z. B. eine aktive
Community.
• gute Dokumentation
Resümee Die nicht funktionale Anforderung ,,Suchergebnisse sollen bei 10 GB Daten
innerhalb von einer Sekunde verfügbar sein” und die funktionale Anforderung ,,Volltextsuche in den Dokumenten muss möglich sein” sind zwei sehr wichtige Anforderungen, für
welche die verbreiteten RDBMs (Relational Database Management Systems) nicht optimiert sind. RDBMs sind darauf ausgelegt komplizierte Relationen abbilden zu können.
Sie wurden nicht dafür gemacht in Dokumenten, welche meist als z. B. blob abgelegt sind,
eine Volltextsuche durchzuführen. Diese Funktionen wurden zwar bei den meisten dieser
System nachgerüstet, allerdings meist nur in rudimentärer Weise. Für solche Zwecke gibt
es Datenbanken, die speziell auf Volltextsuche ausgerichtet sind. Wenn nur die Monatsberichte betrachtet werden, die in einem Jahr hochgeladen werden, sind dies bei ˜ 230
Mitarbeitern 12 ∗ 230 = 2760 Monatsberichte. Wenn ein Monatsbericht eine durchschnittliche Textlänge von 2000 Zeichen hat und davon ausgegangen wird, dass ein Zeichen ein
Byte groß ist, werden pro Jahr 2760 ∗ 2000Byte = 5520000 Byte≈ 5, 26 MB Textdaten
erzeugt, welche durchsucht werden sollen. Diese Menge ist noch sehr überschaubar, doch
steigt diese Menge jedes Jahr weiter an. Des weiteren sollen in Zukunft noch mehr Dokumente und Benutzer von dem System verwaltet werden können, was die Datenmenge
weiter ansteigen lässt. Daher muss das System auf eine performante Volltextsuche ausgerichtet sein. Die Relationen, die in der Datenbank dargestellt werden müssen, sind nicht
sehr komplex. Aus den genannten Gründen bietet sich eine NoSQL Datenbank an.
3.2.1.2
Überblick über NoSQL Datenbanken
NoSQL (not only SQL) Datenbanken verfolgen einen nicht relationalen Ansatz und konzentrieren sich auf einige spezielle Gebiete, in denen sie besonders gut sein müssen. Eines
davon ist eine gute Such-Performance bei großen Datenmengen. Dafür ist die Möglichkeit
Relationen zu definieren kaum oder gar nicht möglich. Datenkonsistenz tritt bei vielen
NoSQL Datenbanken in den Hintergrund, um eine bessere Schreibperformance zu erzielen.
Auch Datentypen sind oft nicht vorzufinden. All dies, vor allem die fehlenden Relationen,
8
erfordert ein vollkommen anderes Konzept bei der Datenbank-Modellierung als man es bei
den RDBMS gewohnt ist. Allerdings lohnt es sich bei Systemen, die große Datenmengen
verwalten, diesen Schritt zu wagen. Twitter, Facebook und Google setzen unter anderem
auf NoSQL Datenbanken, damit Terrabyte an Daten in Millisekunden durchsucht werden
können.
Merkmal
Dokumentenorientierte Datenbanken
Beispiel
Lucene, Solr, CouchDB, MongoDB, Amazon
Simple DB, elasticsearch
AllegroGraph, Core Data, DEX, Neo4j, sones
GraphDB
Google BigTable, SimpleDB
memcached
Amazon Dynamo, Apache Cassandra, Project
Voldemort
Berkeley DB, Memcachedb
Google BigTable, Hbase
Graphendatenbanken
Key-Value-Festplattenspeicher
Key-Value-Caches im RAM
Eventually-consistent-Key-Value-Speicher
Sortierte Key-Value-Speicher
Tabellenorientiert
Tabelle 3.1: Auszug von Datenbanktypen [nos]
Relevant sind für das Projekt nur dokumentenorientierte Datenbanksysteme, da nur sie
die Möglichkeit bieten den Inhalt von Dokumenten abzuspeichern, welcher anschließend
noch durchsuchbar ist.
Dokumentenorientierte Datenbanksysteme sind auf die Speicherung und das spätere Suchen von Text in den Dokumenten spezialisiert. Um die Suche so schnell wie möglich zu
machen, werden raffinierte Methoden benutzt. Eine simple und vor allem auch einfach
zu implementierende Methode wäre, alle Dokumente in die Datenbank zu speichern und
wenn ein Benutzer später einen Text sucht alle Dokumente durchzugehen und den Text
zu suchen. In der Datenbank würde das in etwa wie in Tabelle 3.2 aussehen. Die Tex1
2
3
4
Was ist das
Warum ist das so
Das ist ein Apfel.
Äpfel wachsen an Bäumen
Tabelle 3.2: Die gespeicherten Texte
te werden also ohne System abgespeichert. Wenn ein Text gesucht werden soll, werden
alle Einträge in der Tabelle durchgegangen und Treffer zurückgegeben. Die Suche nach
,,ist” und ,,das” wird die Einträge 1, 2 und 3 ausgeben. Um dieses Ergebnis zu erhalten,
müssen alle Einträge komplett durchsucht werden. Die Komplexität dieser Suche beträgt
also immer O(n2 ), auch wenn das Wort nur im ersten Text vorkommt. Die Datenbank
weiß ja nicht, ob es im letzten Eintrag der Tabelle noch ein zweites mal vorkommt. Dies
ist bei einer großen gespeicherten Menge an Text sehr langsam und daher benutzen auf
Volltextsuche ausgerichtete NoSQL Datenbanken ein besseres System.
Dieses System basiert auf dem aus Büchern bekannten Index. Sätze werden nicht einfach
1:1 übernommen, sondern sie werden analysiert und in einen Index aufgenommen. Ein aus
9
der Tabelle 3.2 erstellter Index kann wie in Tabelle 3.3 aussehen. Aus den Texten in der
Tabelle 3.2 wird dann ein Index erstellt. Wird ein Text in dem Index gesucht, muss nach
den einzelnen Wörtern gesucht werden, die bereits im Index bekannt sind. Es müssen nicht
die indizierten Texte durchsucht werden, sondern nur die indizierten Wörter. Wenn ein
Wort gefunden wird, kann anhand des Eintrags im Index festgestellt werden, in welchem
Text das Wort vorkommt. Die Suche nach ,,Was” liefert das Ergebnis (1, 1). Damit ist
die Position des Satzes und Wortes in den abgespeicherten Texten gemeint, also das Wort
eins in Satz eins der Tabelle 3.2. Dieser Index ist immer noch sehr primitiv gehalten. Die
Was
ist
das
Das
Warum
so
ein
Äpfel
Apfel
wachsen
an
Bäumen
(1,
(1, 2), (2,
(1, 3),
(3,
(2,
(2,
(3,
(3,
(4,
(4,
(4,
(4,
1)
2), (3, 2)
(2, 3)
1)
1)
4)
3)
4)
1)
2)
3)
4)
Tabelle 3.3: Der Index
Suche nach ,,Baum” würde kein Ergebnis liefern, obwohl das verwandte Wort ,,Bäume”
im Index steht. Daher werden die Texte von der Datenbank nicht nur aufgespalten und
in den Index geschoben, sondern die einzelnen Wörter werden analysiert und verwandte
Wörter mit in den Index aufgenommen. So würde nicht nur ,,Bäumen” im Index stehen
sondern auch ,,Baum” oder ,,Bäume” usw. . Außerdem wird oft komplett auf Sonderzeichen und Großschreibung verzichtet. Auch zusammenhängende Wörter können erkannt
werden. z. B. werden aus dem Text ,,wi fi” zusätzlich die Wörter ,,wi-fi” und ,,WiFi” gebildet. Diese Technik wird auch bei der Suche angewandt. Eine Suche nach ,,wi fi” würde
also auch nach ,,wi-fi” und ,,WiFi” suchen.
Durch das Indexing ergibt sich eine sehr performante Suche. Die Komplexität beträgt im
durchschnittlichen Fall nur noch O(1), wenn der Index in einer Hashtabelle steht. Dabei
kommt es auf die Art der Hashtabelle an, wie langsam das Verfahren im ungünstigsten
Fall ist. Allerdings ist der ungünstigste Fall in jedem Fall schneller als der Normalfall beim
primitiven Verfahren. z. B. beträgt die Komplexität bei einer verketteten Hashtabelle im
schlechtesten Fall O(n).
Jetzt stellt sich die Frage, welche dokumentenorientierte NoSQL Datenbank am besten zu
den aufgestellten Anforderungen passt.
3.2.1.3
Gegenüberstellung verschiedener dokumentenorientierter NoSQL Datenbanken
In der Tabelle 3.4 werden verschiedene NoSQL Datenbanken miteinander verglichen. Dabei
werden folgender Kriterien beachtet:
10
• Dokumente indizieren Kann das Datenbanksystem verschiedene Dokumententypen indizieren (PDF, Word, ...)?
• Spaltenupdate Es muss möglich sein, einzelne Spalten in der Tabelle zu aktualisieren, damit bereits im System gespeicherte Monatsberichte als bestätigt markiert
werden können.
• Volltextsuche Volltextsuche in den Dokumenten.
• Backup Gibt es eine Backupmöglichkeit, die durch das Datenbanksystem bereitgestellt wird?
• Dokumentation Die Funktionen des Datenbanksystems müssen gut dokumentiert
sein.
• Open Source Ist das Projekt ein Open Source Projekt. Wenn das nicht der Fall
ist, ist das ein Ausschlusskriterium.
Amazon
Simple DB
[ama]
CouchDB
[cou]
MognoDB
[mon]
Lucene
[luca]
elasticsearch
[ela]
Solr [sola]
Dokumente
indizieren
Spaltenupdate
Volltextsuche
Backup Dokumentation Open Source
nein
ja
ja
ja
sehr gut
nein
nein
ja
ja
ja
sehr gut
ja
nein
ja
ja
ja
sehr gut
ja
nein
ja
ja
ja
sehr gut
ja
ja
ja
ja
ja
spartanisch, da
sehr neues Projekt
ja
ja
ja
ja
ja
sehr gut
ja
Tabelle 3.4: Gegenüberstellung verschiedener dokumentenorientierter NoSQL Datenbanken
Wie in der Tabelle 3.4 zu erkennen ist, ist die NoSQL Datenbank ,,Solr” diejenige, die am
besten an die gegebenen Anforderungen passt. Auch noch interessant ist die Datenbank
,,elasticsearch”. Diese ist allerdings noch relativ jung und hat keine sehr gute Dokumentation.
Die Performance von Solr ist den Anforderungen entsprechend (siehe [lucb]). Somit fällt
die Wahl auf Solr.
3.2.1.4
Solr
Solr ist ein Suchserver, der Dokumente indiziert und dadurch performantes Suchen ermöglicht.
Die Kommunikation mit Solr erfolgt über HTTP Requests und Responses. Ein Request
11
erfolgt über den Aufruf der URL zu dem Solr Server mit Übergabe der Parameter als
HTTP GET-Request. Die Antwort ist in XML kodiert.
Solr bietet durch die vielfältigen Datentypen, die an Solr übergeben werden können, eine
sehr hohe Flexibilität in der Nutzung. Dies wird durch die von Solr genutzt Bibliothek
,,Apache Tika” realisiert [Ext]. Diese Bibliothek kann aus verschiedenen Dateitypen den
darin enthaltenen Text extrahieren. Es werden z. B. HTML-, XML-, Word-, JSON-, JARund PDF-Dateien von Tika unterstützt [tik].
Der aus den übergeben Dateien extrahierte Text wird indiziert. Diese Funktion wird nicht
von Solr zur Verfügung gestellt. Solr nutzt dafür die NoSQL Datenbank ,,Lucene” [Solb],
welche das Herz von Solr bildet. Solr bietet viele Optionen bei der Nutzung von Lucene an,
um die Nutzung so bequem und mit so wenig Programmieraufwand wie möglich zu gestalten. Die Möglichkeit, dass verschiedenste Dokumententypen indiziert werden können, wird
nicht von Lucene zur Verfügung gestellt, sondern von Solr. Wenn Lucene angesprochen
werden soll, ist dies nur mit der Nutzung der API in der Programmiersprache möglich.
Eine Nutzung ohne überhaupt ein Programm zu schreiben, wie es bei Solr möglich ist, ist
bei Lucene nicht vorgesehen.
Der an Lucene übergeben Text wird vor dem indizieren zunächst analysiert. Dafür sind
die ,,Analyzer” zuständig. Diese Analyse ist dafür zuständig mehr Suchergebnisse zu generieren. So wird die Suche nach Baum in Tabelle 3.3 kein Ergebnis bringen. Ein gut
konfigurierte Analyzer hätte aber noch die Einträge Bäume, Baums und weitere verwandte Wörter in den Index hinzugefügt.
Ein Analyzer besteht aus einem Tokenizer und keinem oder beliebig vielen Filtern. Der
Tokenizer erstellt aus einem Wort neue, von diesem Wort abhängige, Wörter. Zu diesem
Zweck gibt es verschiedenste Tokenizer. So erstellt der WhitespaceTokenizerFactory mit
entsprechenden Filtern aus dem Wort wi fi die Wörter WiFi und wi-fi. Die Filter sollen
überflüssige Wörter entfernen. Der StopFilter entfernt z. B. das Wort und aus dem Text,
damit es nicht indiziert wird.
Für ein Feld, das indiziert werden soll, ist es möglich mehrere Analyzer zu konfigurieren.
Jeder Analyzer ist somit direkt von der verwendeten Sprache abhängig. Deshalb ist bei der
WhitespaceTokenizerFactory
KeywordTokenizer
LowerCaseTokenizerFactory
Trennt zwischen den
Leerzeichen
Behandelt das komplette Feld als einzelnen Token
Löscht alle Sonderzeichen und macht alles zu
Kleinbuchstaben
Hallo, wie geht es? ⇒ ,,hallo,”, ,,wie”, ,,geht”’ und ,,es”
http://test.de?Text=+Hallo
wird nicht geändert
Andrea’s Friseursaloon ist zu
⇒ andrea s friseursaloon ist
zu
Tabelle 3.5: Ein paar in Lucene implementierte Tokenizer [tok]
Konfiguration darauf zu achten, dass die konfigurierten Analyzer für die deutsche Sprache
optimiert sind.
3.2.2
Art der Anwendung
Im folgenden Kapitel soll geklärt werden, um welche Art von Anwendung das Dokumentenarchivierungsund -recherchesystem es sich handelt. Es gibt Webanwendungen und Desktopanwendun12
gen. Beide bieten Vor- und Nachteile. Die Anforderungen an die Bedienbarkeit und Darstellung des Programms werden helfen, die Entscheidung zu treffen, welcher Anwendungstyp
am besten geeignet ist..
3.2.2.1
Funktionale Anforderungen
• Aufteilung in verschiedene Bereiche muss möglich sein
3.2.2.2
Nicht funktionale Anforderungen
• leichte Installation und Updates beim Endanwender
• übersichtliche Oberfläche
3.2.2.3
Gegenüberstellung Website - Desktopanwendung
Die Website und die Desktopanwendung bietet für alle Anforderungen eine Lösung. Die
Website hat allerdings den Vorteil, dass beim Endanwender gar keine Installation und
keine Updates nötig sind. Daher fällt die Wahl auf eine Website, da hier die Problematik
der Softwareverteilung entfällt.
3.2.2.4
Website
Die Website wird den zentralen Punkt der kompletten Anwendung bilden, von der aus die
gesamte Funktionalität koordiniert wird. Auf der Website hat der Anwender die Möglichkeit Dokumente hochzuladen und nach ihnen zu suchen, sie zu editieren und sie herunterzuladen. Diese Funktionen stehen für PMRs und Monatsberichte zur Verfügung. Um
die Website übersichtlich zu halten, wird es für jede Dokumentenart eine eigene Rubrik
geben.
Aufbau Der Aufbau der Seiten für PMRs, Monatsberichte und auch zukünftiger Dokumentenarten ist gleich. Eine Seite ist in zwei Hauptteile gegliedert, welche unterschiedliche
Funktionen bieten sollen. Der eine Teil ist für das Hinzufügen neuer Dokumente in das
System zuständig, der andere für das Suchen nach diesen Dokumenten.
Die Benutzer in der Rolle supervisor müssen bei Monatsberichten zusätzlich die Möglichkeit haben, Monatsberichte zu sehen, die bisher nur von den Angestellten unterschrieben
wurden und noch nicht von ihm bestätigt wurden. Admins müssen nach Dokumenten aller
Benutzer zu suchen und diese g. g. f. löschen können.
Hinzufügen von Dokumenten Um neue Monatsberichte oder PMRs hinzuzufügen
muss es auf der Website eine Möglichkeit geben diese hochzuladen und gleichzeitig abzuspeichern wem das Dokument gehört. Eigentümer ist derjenige, der das Dokument hochgeladen hat. Zusätzlich muss beim Hochladen des Dokumentes ein Datum angegeben werden,
welches beschreibt, für welchen Monat und welches Jahr der Monatsbericht bzw. PMR gilt.
Das ist notwendig, da in den Dokumenten nicht nur ein Datum steht und daher von Solr
13
nicht eindeutig erkannt werden kann, welches das zu nutzende Datum ist. Das hochgeladene Dokumente muss dann mit den Information über den Besitzer, die Art des Dokuments
und das Datum an Solr übergeben werden.
Anzeige unsignierter/unbestätigter Monatsberichte (nur für Benutzer in der
Rolle supervisor) In dieser Anzeige werden alle Monatsberichte der Mitarbeiter gelistet, die bisher noch nicht vom Vorgesetzten bestätigt wurden. Bei Monatsberichten ist
zusätzlich zu der Bestätigung die Unterschrift des Vorgesetzten nötig. Dies muss durch
den Vorgesetzten sichergestellt werden.
Suche nach Dokumenten Die Darstellung und Funktion der Suche nach Dokumenten
hat rollenspezifische Unterschiede. Für jede Rolle soll es eine Suchmaske geben, welche
von gewöhnlichen Suchmaschinen wie Google oder Yahoo bekannt sind. In dieser Suchmaske kann der zu suchende Text eingegeben werden. Es muss auch möglich sein, nach
einem Zeitraum zu suchen, für den der Monatsbericht oder PMR erstellt wurde. Bei Monatsberichten kann in der Suchmaske angegeben werden, ob das Dokument bereits vom
Vorgesetzten bestätigt wurde.
Die Rollen supervisor und admin haben zusätzlich die Möglichkeit Dokumente mit Angabe des Besitzers zu suchen. Benutzer in der Rolle supervisor haben nur die Möglichkeit
Benutzer anzugeben, die ihnen zugeordnet sind. Benutzer in der Rolle admin hingegeben
dürfen alle Benutzer angeben.
Login Der Login soll mit dem Atos Worldline internen Benutzermangamentsystem ,,DAS”
ermöglicht werden. Das ist ein System, in dem bereits alle Angestellten von Atos Worldline
mit Login Daten sowie personenbezogenen Daten eingepflegt sind. Darauf kann über eine
API zugegriffen werden. Durch die Nutzung von ,,DAS” müssen keine Benutzer angelegt
werden. Die Benutzerrollen über DAS abgebildet werden, da sie darin bereits vorhanden
sind.
Web-Framework Für die Website soll Tapestry als Framework benutzt werden. Tapestry ist bei Atos Worldline Standard zur Erstellung von Websites. Um Tapestry zu
nutzen wird Java und ein Application Server benötigt. Für weitere Informationen siehe
http://tapestry.apache.org/.
3.2.3
Application Server
Um Solr benutzen zu können muss ein Application Server vorhanden sein, da Solr aus einer
WAR (Web Application Archive) Datei besteht. Diese muss in einem Application Server
geladen werden. Es gibt auch die Möglichkeit, Solr direkt aus der Anwendung zu starten,
statt es im Application Server zu laden. Das möchte ich allerdings vermeiden, da Website
und Solr dann auf dem gleichen Application Server laufen müssen. Aus Gründen der
Systemperformance kann es Sinn machen, beide auf unterschiedliche Application Server
mit unterschiedlicher Hardware laufen zu lassen. Im Moment steht dieses Vorgehen noch
nicht im Fokus, kann aber in Zukunft durchaus relevant werden.
14
3.2.3.1
Jetty
Ich werde zum Testen des Projektes Jetty als Application Server benutzen. Es gibt noch
andere Application Server wie z. B. Glassfish, JBoss oder Tomcat, allerdings ist ein Tapestry Projekt besonders einfach zu nutzen, wenn Jetty als Application Server genutzt
wird. Wenn das Projekt lauffähig ist, kommt es auf einen Application Server der von
Atos Worldline zur Verfügung gestellt wird. Jetty wird also nur zum Testen des Projektes
benötigt.
3.3
Datenbankschema
Name
id
document
text
Datentyp
uuid
blob
string
document name
content type
string
string
owner
valid
string
boolean
date
date
type
string
Beschreibung
Eindeutige ID
Das Dokument als BLOB
Der indizierte Dokumenteninhalt
Der Name des Dokumentes
Die Art des Dokumentes (z. B.
PDF, ZIP, Word Dokument,
...)
DAS ID
Gibt an, ob das Dokument
gültig ist
Für welches Datum das Dokument erstellt wurde
Dokumententyp (PMR, Monatsbericht)
Tabelle 3.6: Datenbankschema
Das Datenbankschema ist kein typisches Schema, wie man es von RDBMS gewohnt ist.
Jeder Eintrag in Solr ist dokumentenorientiert, also an ein Dokument gebunden. Das Schema wird in einer schema.xml in Solr konfiguriert. Eine Dokumentation für diese Datei ist
unter http://wiki.apache.org/solr/SchemaXml zu finden. Für die Erstellung des Schemas
muss Folgendes bekannt sein:
• Solr erstellt automatisch eine id, wenn diese vom Typ uuid ist und keine an Solr
übergeben wurde. Für eine Spezifikation von uuid siehe http://de.wikipedia.org/
wiki/Universally_Unique_Identifier.
• Aus dem an Solr übergeben Dokument wird der enthaltende Text extrahiert und
standardmäßig in das Feld ,,text” gespeichert. Das übergebene Dokument wird nicht
gespeichert! Es muss vom Programm separat übergeben werden.
• Metainformationen, z. B. der Content-Type (die Art des Dateityps), können von Solr
automatisch gesetzt werden.
• Bei Monatsberichten ist ein Dokument erst gültig, wenn der Vorgesetzte das Dokument unterschrieben und bestätigt hat. PMRs sind sofort gültig.
15
• Vom Benutzer muss beim Hochladen eines Dokumentes ein Datum angegeben werden, welches beschreibt für welches Datum sein Monatsbericht oder PMR gültig ist.
Dieses Datum wird auch in der Datenbank gespeichert.
• Der Besitzer eines Dokuments wird anhand seiner ID erkannt, die im DAS hinterlegt
ist.
3.4
Prozessabläufe
Im folgenden werden Prozessabläufe dargestellt, die mit bestimmten Aktionen zusammenhängen.
3.4.1
Ermittlung von Login Daten der Benutzer
Für den Login wird eine bestehende Lösung von Atos Worldline genutzt, in der bereits
alle Angestellten von Atos eingepflegt sind. Dieses System trägt den Namen DAS.
3.4.2
Ermittlung von Angestellten eines Vorgesetzten
Inhalte des Organigramms von Atos Worldline sind im DAS System abgebildet.
3.4.3
Ermittlung von Dokumenten eines Angestellten
Aus der Datenbank werden alle Einträge geladen, dessen Felder folgende Werte haben.
owner=ID des Angestellten
3.4.4
Ermittlung von unbestätigten Dokumenten der Vorgesetzten
Für diese Aktion ist der Vorgesetzte bekannt. Es müssen die Angestellten des Vorgesetzten
(siehe Kapitel 3.4.2) ermittelt werden. Für jeden Angestellten werden alle Einträge aus
der Datenbank geladen, dessen Felder folgende Werte haben.
valid=false
owner=ID des Angestellten
3.4.5
Ermittlung der Email-Adresse eines Benutzers
Die E-Mail Adresse ist im DAS System hinterlegt.
3.4.6
Vorgesetzter weist das Dokument eines Angestellten zurück
Für diese Aktion ist der Vorgesetzte, das Dokument und der Angestellte bekannt. Dem
Angestellten wird in dem Fall eine Email geschickt (Ermittlung der Email siehe Kapitel
3.4.5). Außerdem wird das Dokument aus der Datenbank gelöscht.
16
3.4.7
Suche nach Text in den Dokumenten
Für diese Aktion ist der zu suchende Text gegeben, optional ein Zeitraum ,,von/bis”
und der Besitzer der zu suchenden Dokumenten. Bei Monatsberichten gibt es zusätzlich
eine Suchoption, die prüft, ob das Dokument vom Vorgesetzten bestätigt wurde. Aus der
Datenbank sollen alle Dokumente geladen werden, welche mit dem Text oder Ähnlichkeiten
des Textes und den restlichen Parametern übereinstimmen.
• Der gesuchte Text
• owner=ID des Angestellten (optional)
• from=Startdatum des Zeitraums
• to=Enddatum des Zeitraums
• valid=Ob das Dokument vom Vorgesetzten bestätigt wurde (Nur für Monatsberichte)
3.5
3.5.1
Architektur
Gesamtarchitektur
Das Diagramm soll einen Überblick über das gesamte System geben und somit das Verständnis für das Zusammenspiel der verschiedenen Komponenten erleichtern.
17
3.5.2
Website
Die in Abbildung ?? beschriebene Architektur der Website zeigt die verschiedenen Bestandteile der Website und wie diese gegliedert sind. Wenn man die Website aufruft und
eingeloggt ist, wird eine Auswahl von Dokumententypen angezeigt. Ist ein Dokumententyp
ausgewählt, kann von dort zu den jeweiligen Aktionen, die für den jeweiligen Dokumententyp zur Verfügung stehen, navigiert werden.
Abbildung 3.1: Architektur der Website
3.6
Use Cases
Die Use Cases beschreiben mögliche Anwendungsszenarien.
18
Abbildung 3.3: Use Case für
die Suche nach einem PMR
bzw. Monatsbericht.
Abbildung 3.2: neuer PMR
Abbildung 3.4: Neuer Monatsbe- Abbildung 3.5: Löschen eines
richt
Monatsberichts bzw. PMRs
19
3.7
Projektplan
Den in Tabelle 3.7 dargestellten Projektplan werde ich versuchen einzuhalten. Das Startdatum ist der 31.10.2011. Mit Berücksichtigung der Wochenenden wird das geplante Projektende am 5.12.2011 sein. o
Paket Paketname
ID
1
JBoss installieren
Dauer
(Tage)
1
Vorgänger
Beschreibung
-
2
3
4
Solr installieren
Solr konfigurieren
Layout der Website erstellen
Funktionierenden
Entwurf der einzelnen Teile der
Website erstellen
1
1
2
1, 2
-
7
3, 7
6
Website testen
1
5
7
Gefundene Fehler
verbessern
Entwürfe an das
Layout anpassen
3
6
2
7
Erneutes Testen
der Website
Massendatentest
2
8
1
9
Finale Änderungen
5
10
Installieren und konfigurieren vom
JBoss
Installieren von Solr im JBoss
Konfigurieren von Solr
Layout erstellen, dass für die Website genutzt wird
Hier wird die komplette Website
programmiert. Allerdings nur ein
Entwurf, bei dem es das Aussehen
und die Bedienbarkeit noch nicht so
wichtig sind
Alle Funktionen der Website sollen
getestet werden
Beim Test gefundene Fehler werden
verbessert
Entwürfe werden an das erstellte
Layout angepasst und die Website
wird benutzerfreundlich gestaltet
Test der Funktionen und Benutzerfreundlichkeit
Test, wie sich das System bei großen
Datenmengen verhält
Beim Testen aufgefallene Änderungen werden verbessert
5
8
9
10
11
Tabelle 3.7: Arbeitspakete
20
Kapitel 4
Realisierung
In diesem Kapitel wird beschrieben, wie die einzelnen Technologien installiert und konfiguriert wurden und in welcher Form die Website programmiert wurde. Es werden auch
entstandene Probleme besprochen und die Lösungen dafür vorgestellt. Ebenso ist die Beschreibung des Ergebnisses Teil dieses Kapitels.
4.1
Solr
Solr habe ich in der aktuellen Version 3.4.0 installiert.
4.1.1
Installation
Um Solr zu installieren, muss das von http://www.apache.org/dyn/closer.cgi/lucene/
solr/ heruntergeladene Archiv entpackt werden. Darin enthalten ist bereits ein Jetty Application Server mit einem konfigurierten Solr Server, welcher über eine Jar Datei gestartet
werden kann. Allerdings ist diese Konfiguration lediglich eine Beispielkonfiguration und
muss im Regelfall angepasst werden. Es soll bei einem einfachen und schnellen Einstieg
in Solr helfen. Die Jar Datei ,,start.jar” liegt im Archiv unter dem Verzeichnis example
und wird mit dem Befehl ,,java -jar start.jar” gestartet. Diesen habe ich in der Anfangsphase der Entwicklung auch genutzt. Eine weitere Installation war nicht mehr nötig, da
während der Entwicklung Probleme mit dem Solr Server entstanden sind, wodurch Solr
nicht mehr im Zusammenhang mit einem Application Server genutzt werden konnte. Die
Gründe dieser Probleme sind unter Kapitel 4.1.3 beschrieben.
4.1.2
Konfiguration
Es gibt für Solr mehrere Konfigurationsdateien. Sie liegen wie folgt in den Verzeichnissen.
21
solr/
solr.xml
bin/
...
conf/
schema.xml
solrconfig.xml
...
data/
...
In der Datei solr/solr.xml werden Cores (verschiedene Instanzen) von Solr spezifiziert.
An dieser Datei musste allerdings nichts geändert werden, da dieses Feature nicht genutzt
wird. Sie sieht wie folgt aus.
solr.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!-Licensed to the Apache Software Foundation (ASF) under ...
-->
<!-All (relative) paths are relative to the installation path
persistent: Save changes made via the API to this file
sharedLib: path to a lib directory that will be shared across
all cores
-->
<solr persistent="false">
<!-adminPath: RequestHandler path to manage cores.
If ’null’ (or absent), cores will not be manageable via
request handler
-->
<cores adminPath="/admin/cores" defaultCoreName="collection1">
<core name="collection1" instanceDir="." />
</cores>
</solr>
Die Datei schema.xml enthält, wie der Name bereits andeutet, das Datenbankschema.
Darin werden Datentypen beschrieben, welche Analyzer für welche Datentypen genutzt
werden und welche Felder für die abzuspeichernden Daten vorhanden sind. Die Konfiguration ergibt sich aus dem in Tabelle 3.6 definierten Schema. Zusätzlich dazu muss ein
sinnvoller Analyzer für das Feld text gewählt werden. Die restlichen Felder werden so in
den Index aufgenommen, wie sie abgespeichert werden, da sie nur aus einzelnen Wörtern
bestehen und keinen Text enthalten. Der Analyzer für das Feld text soll alle Wörter einzeln
indizieren, außer Wörter wie ,,und”, ,,oder” usw. , es soll nicht auf Groß- und Kleinschreibung geachtet werden und Umlaute sollen auch ignoriert werden. Ein ü wird also zu einem
22
u, ein ä zum a usw. . Der Analyzer für die Indizierung und die Suche besteht also aus
folgenden Teilen:
• Tokenizer
– solr.WhitespaceTokenizer
• Filter
– solr.LowerCaseFilterFactory
– solr.StopFilterFactory
Es gibt die Möglichkeit je einen Analyzer für die Suche und einen für die Indizierung
zu konfigurieren. Das bedeutet, dass der Text beim indizieren anders analysiert wird,
als bei der Suche. Diese Funktion wird nicht genutzt. Sie wird meistens dann genutzt,
wenn nach Synonymen von Wörtern gesucht werden soll. Synonyme sollen im Regelfall
nicht indiziert werden, aber bei der Suche soll eine Suche nach einem Synonym auch ein
Ergebnis liefern. Da in den Dokumenten nach Namen und Zahlen gesucht wird ist die Suche
nach Synonymen nicht sinnvoll. Zu dem Schema ist noch ein weiteres dynamisches Feld mit
dem Namen ,,ignored *” hinzugekommen. Die Daten die an dieses Feld übergeben werden,
speichert Solr nicht ab, sondern verwirft diese. Der Hintergrund ist, dass beim Extrahieren
von Text aus einem Dokument auch Metadaten des Dokumentes zurückgegeben werden.
Diese können entweder gespeichert werden (wie es bei dem Feld ,,content type” getan
wird) oder verworfen werden. Existiert das Feld ,,ignored *” nicht, schlägt die Indizierung
eines Dokumentes mit der Meldung fehl, dass Solr nicht weiß, wo es die Metainformation
abspeichern soll.
Die Konfigurationsdatei sieht wie folgt aus:
solr.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!-Licensed to the Apache Software Foundation (ASF) under ...
-->
<!-This is the Solr schema file. This file should be named
"schema.xml" ...
-->
<schema name="example" version="1.4">
<!-- ...
-->
<types>
<!-- id type -->
<fieldType name="uuid" class="solr.UUIDField"
indexed="true" />
<!-- field type definitions. ...
-->
23
<!-- The StrField type is not analyzed, but indexed/stored
verbatim. -->
<fieldType name="string" class="solr.StrField"
sortMissingLast="true" omitNorms="true"/>
<!-- boolean type: "true" or "false" -->
<fieldType name="boolean" class="solr.BoolField"
sortMissingLast="true" omitNorms="true"/>
<!--Binary data type. The data should be sent/retrieved in
as Base64 encoded Strings -->
<fieldtype name="binary" class="solr.BinaryField"/>
<!-- since fields of this type are by default not stored or
indexed, any data added to them will be ignored
outright. -->
<fieldtype name="ignored" stored="false" indexed="false"
multiValued="true" class="solr.StrField" />
<!-- The optional sortMissingLast and sortMissingFirst
attributes are currently supported on types that ...
-->
<!-Default numeric field types. For faster range queries,
consider the tint/tfloat/tlong/tdouble types.
-->
...
<!-- The format for this date field is of the form ...
-->
<fieldType name="date" class="solr.TrieDateField"
omitNorms="true" precisionStep="0"
positionIncrementGap="0"/>
<!-- A Trie based date field for faster date range queries
and date faceting. -->
<fieldType name="tdate" class="solr.TrieDateField"
omitNorms="true" precisionStep="6"
positionIncrementGap="0"/>
<!-- solr.TextField allows the specification of ...
-->
<!-- A text field that only splits on whitespace for exact
matching of words -->
<fieldType name="text_ws" class="solr.TextField"
positionIncrementGap="100">
24
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true"
words="stopwords_de.txt"
enablePositionIncrements="true" />
</analyzer>
</fieldType>
</types>
<fields>
<!-- Valid attributes for fields:
...
-->
<!-- the fields to be stored in the database -->
<field name="id" type="uuid" indexed="true" stored="true"
default="NEW"/>
<field name="owner" type="string" indexed="true"
stored="true" required="true"/>
<field name="valid" type="boolean" indexed="true"
stored="true" required="true"/>
<field name="date" type="tdate" indexed="true" stored="true"
required="true"/>
<field name="type" type="string" indexed="true" stored="true"
required="true"/>
<field name="document_name" type="string" indexed="false"
stored="true" required="true"/>
<field name="document" type="string" indexed="false"
stored="true" required="true"/>
<!-- catchall field -->
<field name="text" type="text_ws" indexed="true"
stored="false" multiValued="true"/>
<field name="content_type" type="string" indexed="true"
stored="true"/>
<!-- ignore extra metadata information provided by apache
tika -->
<dynamicField name="ignored_*" type="ignored"
multiValued="true"/>
</fields>
<!-- Field to use to determine and enforce document uniqueness.
Unless this field is marked with required="false", it will
be a required field
-->
<uniqueKey>id</uniqueKey>
25
<!-- field for the QueryParser to use when an explicit
fieldname is absent -->
<defaultSearchField>text</defaultSearchField>
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
<solrQueryParser defaultOperator="OR"/>
</schema>
solrconfig.xml ist die Konfigurationsdatei in der alle systemnahen Einstellungen stehen. So
werden dort die Verzeichnisse angegeben, in denen Java Bibliotheken liegen, welche von
Solr genutzt werden und das Verzeichnis in dem der Index, also der Inhalt der Datenbank,
liegt. Es wird angegeben, wie viele Dokumente in den RAM geladen werden dürfen bis sie
auf der Festplatte abgespeichert werden, wie Dateien gesperrt werden und welche Timeouts
für die Sperrung der Dateien gelten. Diese Konfiguration habe ich größtenteils bei der
Standardkonfiguration belassen. Die Datei ist 1515 Zeilen lang und daher zu lang um sie
hier anzuzeigen. Sie sieht strukturell wie die von Solr mitgelieferte solrconfig.xml aus, mit
dem Unterschied dass andere Verzeichnisse zu den Java Bibliotheken angegeben sind.
4.1.3
Probleme
Bei der Benutzung von Solr traten einige Probleme auf. Für alle Probleme konnte eine
Lösung gefunden werden.
Problem: Das Feld ,,document” konnte nicht an Solr übergeben werden. Der
Base64 kodierte Inhalt des Dokuments konnte nicht an Solr übergeben werden, da im Programm eine Exception mit der Meldung ,,socket write error” geworfen wurde. Die Ursache
für dieses Problem ist, dass Parameter an Solr mittels HTTP GET Request gesendet werden. Da der Base64 kodierte String sehr lang wird, ist es nicht möglich diesen per HTTP
GET Request zu versenden. Das Dokument, aus dem der Text extrahiert wird, wird als
HTTP POST Request verschickt. Dieses Dokument wird von Solr aber nicht abgespeichert
und es gibt auch keine Möglichkeit, dies über eine Konfiguration von Solr zu verlangen.
1. Lösungsansatz: Solr patchen Da Solr Open Source ist könnte der Quelltext von
Solr so geändert werden, dass Solr die Parameter nicht per HTTP GET sondern per HTTP
POST Request verschickt. Dies würde aber Arbeit an der Client und Server Komponente
von Solr erfordern, bei denen es nicht trivial ist abzuschätzen, welche Seiteneffekte dies
hat.
2. Lösungsansatz: Dateien lokal speichern Die Dateien können auf dem Webserver
gespeichert werden und der Pfad zu einer Datei wird an Solr übergeben. Dies erfordert
allerdings auch zusätzlichen Aufwand. Es muss die Logik dafür programmiert werden und
die Dateien müssen zusätzlich zum Index durch regelmäßige Backups gesichert werden.
26
3. Lösungsansatz: Embedded Solr Server Der Solr Server kann auch heraus der
Anwendung aus gestartet werden. Er läuft dann nicht mehr im Application Server und
ist somit nur aus der Anwendung direkt ansprechbar. Damit erfolgt keine Kommunikation
übers Netzwerk, wodurch die Parameter nicht mehr per HTTP GET Request verschickt
werden. Der Nachteil davon ist, dass der Solr Server von der Anwendung abhängig ist und
nicht als eigenständige Instanz laufen kann. Das ist für das gesamte Softwaresystem aber
nicht relevant und daher hier die beste Lösung.
Problem: Text wird aus manchen PDF Dateien nicht korrekt extrahiert Für
die Extrahierung von Text ist die Bibliothek ,,Apache Tika” zuständig. Leider hat diese
Bibliothek Probleme mit der Extrahierung von Text aus manchen PDF Dateien. Der
Text ist zwar vollständig, Leerzeichen werden jedoch teilweise nicht erkannt und auch
Zeilenumbrüche fehlen stellenweise. Das Verhalten tritt nicht bei allen PDF Dateien auf.
Lösung:
emphApache Tika patchen Apache Tika ist ein Open Source Projekt und daher kann
der Quelltext leicht geändert werden. Die Änderung im Quelltext ist nur eine kleine, und
zwar muss ein boolean Wert von ,,true” auf ,,false” geändert werden. ,,Apache Tika”
benutzt ,,Apache PDFBox” um Text aus PDF Dokumenten zu extrahieren. Es gibt bei
PDFBox eine Option, dass beim Extrahieren vom Text auf die Platzierung des Textes
geachtet werden soll. Diese Option ist von Tika aus Performance-Gründen ausgeschaltet.
Über eine Konfiguration ist das auch nicht zu ändern, weshalb der Quelltext geändert
und die Bibliothek neu erstellt werden muss. Konkret geändert werden muss in der Klasse
org.apache.tika.parser.PdfPDF2XHTML der Aufruf der Methode setSortByPosition mit
dem Parameter ,,true” anstatt ,,false”.
Problem: Aus Zip Dateien werden nur die Namen der enthaltenen Dateien
extrahiert Wenn an Solr eine Zip Datei übergeben wird, wird nicht der Inhalt aller darin
enthaltenden Dateien extrahiert, sondern die Dateinamen der im Archiv enthaltenden
Dateien.
Lösung: Solr patchen Glücklicherweise gibt es dafür bereits einen Patch, der unter
https://issues.apache.org/jira/browse/SOLR-2416 zu finden ist.
4.2
Website
Für die Website von Solr wird Tapestry in der aktuellen Version 5.2.6 benutzt.
4.2.1
Installation
Tapestry kann sehr einfach mittels ,,Apache Maven” installiert werden. Maven ist ähnlich
wie das von C/C++ bekannte Tool ,,make”, jedoch wesentlich mächtiger. Ich bin nach
der Anleitung vorgegangen, die unter http://tapestry.apache.org/getting-started.
html beschrieben ist. Mit dieser Installation ist auch direkt ein Jetty Application Server
verfügbar, so dass dessen Installation entfällt.
27
4.2.2
Konfiguration
Dank der Erstellung des Projektes durch Maven musste nichts gesondert konfiguriert werden.
4.2.3
Probleme
Es gab keine wesentlichen Probleme mit Tapestry. Da Tapestry ein für mich neues Framework war, musste ich mich entsprechend einarbeiten. Das Framework an sich stellte alle
benötigten Funktionen zur Verfügung und ist im Allgemeinen leicht zu erlernen.
4.3
Jetty
Die Installation von Jetty entfiel, da Solr aus den in Kapitel 4.1.3 beschriebenen Problemen
keinen Application Server mehr benötigt und Tapestry bereits einen Jetty Application
Server bereitstellte.
4.4
Programmierung
Um Solr zu benutzen musste nicht viel programmiert werden, da es schon alle Funktionen
bereitstellt, um ein Dokument zu indizieren. Es mussten die Parameter und das Dokument
an Solr übergeben werden. Um nach Dokumenten zu Suchen, kann für jedes im Schema
existierende Feld ein Suchstring übergeben werden. Dieser Suchstring kann ein einfacher
Text sein, oder auch ein komplexer regulärer Ausdruck. Für das Feld date ist die Suche
nach einem Zeitraum in dem das Datum liegen soll möglich. Die Syntax für den Suchstring
ist unter http://wiki.apache.org/solr/SolrQuerySyntax beschrieben.
Die Website erforderte mehr Aufwand bei der Programmierung. Tapestry unterstützt die
Erstellung in weiten Teilen, da grundlegende Funktionen bereits implementiert sind. So
müssen z. B. die Parameter eines Requests von einem HTTP-Form Element nicht mehr
in Java Datentypen umgewandelt werden. Durch diese und andere unterstützende Fähigkeiten von Tapestry kann man sich wesentlich auf die Erstellung der Funktionalität der
Website konzentrieren. Durch Tapestry wird der Quelltext strikt in HTML Template Code und Java Code aufgeteilt. Der HTML Template Code wird durch Elemente der Java
Klassen dynamisch gefüllt und enthält nur die darzustellende Seite, also keine Programmlogik. Die Logik ist in den dazugehörigen Java-Klassen. Dort habe ich die Java-Klassen,
welche die Templates befüllen, möglichst frei von Programmlogik gehalten und sie nur
mit den, dem Template zu übergebenen, Daten befüllt. All die Funktionen, wie die Loginfunktionalität, Anbindung an Solr und Rechtemangement, finden also nicht in den zu den
Templates gehörenden Java-Klassen, sondern in eigenen Klassen statt. Das schafft Übersicht und vermeidet doppelten Quelltext, da Funktionen, die für Teile der Website doppelt
benötigt werden, in extra Klassen ausgelagert werden. Insgesamt stellt die Website sieben
unterschiedliche Unterseiten zu Verfügung.
• Login
• Auswahl für welchen Dokumententyp die Unterseiten angezeigt werden sollen (PMR
oder Monatsbericht)
• Suche nach PMRs
28
• Hochladen von einem neuen PMR
• Suche nach Monatsberichten
• Hochladen eines neuen Monatsberichts
• Anzeige für den Vorgesetzten welche Monatsberichte seiner Mitarbeiter noch nicht
bestätigt wurden
Um neue Dokumente dynamisch hinzufügen zu können, habe ich nicht für jeden Dokumententyp eine eigene Such- und Uploadfunktion programmiert, sondern ein Template
und eine Java Klasse für alle Dokumententypen. Die Website weiß, welchen Dokumententyp der Benutzer ausgewählt hat und passt so die Anzeige entsprechend an. Im System
selbst sind alle verfügbaren Dokumententyp über eine Konfigurationsdatei definiert. In
dieser Konfigurationsdatei wird auch definiert, welche Seiten für welchen Dokumententypen verfügbar sind. Für den Vorgesetzten ist für den PMR keine Seite vorhanden, welche
anzeigt, welche PMRs seiner Angestellten noch nicht von ihm signiert wurden, da sie
nicht signiert werden müssen. Dadurch können Dokumententypen sehr einfach ins System
eingebunden werden, da kein Quelltext, sondern einzig die Konfigurationsdatei angepasst
werden muss.
4.5
Ergebnis
Das Ergebnis, was für den Endbenutzer sichtbar ist, ist die Website. Bilder der einzelnen
Teile der Website sind im Anhang ab Seite 36 zu finden.
Das gesamte Software-System ist sehr einfach zu starten. Entweder wird die erzeugte
WAR Datei in einem vorhanden Application Server geladen, oder es wird aus dem Projekverzeichnis der Befehl ,,mvn jetty:run” aufgerufen. Dieser Befehl startet den Webserver,
welcher dann unter http://localhost:8080/documentarchiver/ zu erreichen ist. Dort
muss sich der Anwender entweder anmelden, außer der Webserver hat für diesen Nutzer
noch eine HTTP-Session gespeichert und den Anwender daher erkennt. Ist der Anwender eingeloggt, wird er aufgefordert, einen Dokumententypen, PMR oder Monatsbericht,
auszuwählen, für den er weitere Aktionen durchführen möchte. Bei PMRs besteht für ihn
die Möglichkeit neue PMRs hinzuzufügen oder nach ihnen zu suchen. Wenn der Anwender in der Rolle supervisor oder admin ist (Vorgesetzte sind supervisor und ausgewählte
Mitarbeiter des Controllings sind admins), hat er die Möglichkeit, nach Dokumenten eines bestimmten Angestellten zu suchen. Bei Monatsberichten stehen die selben Optionen
zur Verfügung wie bei PMRs. Es gibt jedoch für Vorgesetzte noch die Möglichkeit, alle
Monatsberichte anzuzeigen, die von seinen Angestellten in das System hinzugefügt wurde,
von ihm noch nicht bestätigt und signiert wurden.
Dokumententypen und deren Funktionen werden über eine Konfigurationsdatei definiert.
Diese Konfigurationsdatei sieht wie folgt aus:
documentarchiver.properties
# In dieser Datei werden Dokumententypen und die Zuordnungen von
# Aktionen zu einem Dokumententyp definiert. Z.B. welche Seite
# für die Uploads von PMRs zuständig ist und welche für Monats# berichte oder für die Suche dieser Dokumente.
# Die Konfiguration hat folgende Syntax
# dokumententyp+Aktion=aktion
29
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
also z.B.:
Monatsbericht+Upload=Upload
Gültige Werte für "Aktion" sind:
Upload
- Die Seite auf der die Dokumente hochgeladen werden
sollen
Search
- Die Seite auf der die Dokumente gesucht werden
sollen
Unsigned - Die Seite auf der dem Vorgesetzten unbestätigte
Dokumente der Mitarbeiter angezeigt werden
Der Wert von der Eigenschaft kann jede Seite sein, die im
Tapestry-Projekt existiert. Soll eine Seite nicht genutzt
werden können, wird der Wert NULL genutzt.
NULL
- Wenn die Seite nicht verfügbar ist. Es muss allerdings ein Feld zu einem Dokumententyp vorhanden
sein, das nicht NULL ist.
Der Wert NULL hat Auswirkungen auf den Workflow, wenn dieser
für die Aktion Unsigned gesetzt wird. Ist für diese Aktion
eine Website gesetzt (er ist also nicht NULL), müssen Dokumente
mit der dort angegeben Seite von einer dort bestimmten
(in der derzeit implementierten UnsignedMB ist das der
Vorgesetzte) Person bestätigt werden. Beim hochladen werden die
Dokumente daher mit einem Flag als ungültig markiert. Durch
einen Schritt, der bei der Aktion Unsigned vorgenommen wird,
muss das Dokument als gültig markiert werden können. Ist dieser
Wert NULL entfällt der Workflow und das Dokumente ist mit dem
Upload des Users direkt gültig.
Derzeit implementierte Websiten für Aktionen sind:
Aktion Upload: Die Website "Upload" stellt eine
Upload Funktionalität zur Verfügung. Über die Properties
Datei der Upload Seite (Upload.properties) muss spezifiziert
werden, wie viele Dokumente für den Dokumententyp hochgeladen
werden sollen.
Aktion Search: Die Website "Search" stellt eine Suchfunktion
zur Verfügung.
Aktion UnsignedMB: Diese Funktion zeigt dem Vorgesetzten
alle Dokumente für den konfigurierten Typ an, die noch
von ihm noch nicht bestätigt wurden. Er hat dort auch die
Möglichkeit die Dokumente zu signieren.
# vorhandene Dokumententypen, durch ’;’ getrennt
types=PMR;Monatsbericht
# Konfiguration für Monatsberichte
Monatsbericht+Upload=Upload
30
Monatsbericht+Search=Search
Monatsbericht+Unsigned=UnsignedMB
# Konfiguration für PMRs
PMR+Upload=Upload
PMR+Search=Search
# Müssen nicht bestätigt werden...
PMR+Unsigned=NULL
# Namen die für die Verlinkungen der Seiten angezeigt werden
# sollen
Upload=Hochladen
Search=Suche
UnsignedMB=Unbestätigte Monatsberichte
Wenn ein neuer Dokumententyp vom System verwaltet werden soll, ist dies sehr einfach
und ohne Programmierkentnisse möglich. Sollen z. B. Urlaubsanträge zum System hinzugefügt werden können, muss die Konfigurationsdatei wie folgt angepasst werden.
documentarchiver.properties
# ...
# vorhandene Dokumententypen, durch ’;’ getrennt
types=PMR;Monatsbericht;Urlaubsantrag
# Konfiguration für Monatsberichte
...
# Konfiguration für PMRs
...
# Konfiguration für Urlaubsanträge
Urlaubsantrag+Upload=Upload
Urlaubsantrag+Search=Search
Urlaubsantrag+Unsigned=UnsignedMB
# Namen die für die Verlinkungen der Seiten angezeigt werden
# sollen
...
UnsignedMB=Unbestätigte Dokumente
31
32
Kapitel 5
Fazit und Ausblick
In Solr steckt ein enormes Potential, um eine sehr mächtige und schnelle Volltextsuche auf
sehr einfache Art und Weise zu implementieren. Ich habe nur einen kleinen, aber dennoch
sehr umfangreichen Teil der Möglichkeiten von Solr nutzen dürfen. Solr unterstützt die Extrahierung von Text aus unzähligen Dokumententypen (PDF, Word, Excel, usw. ), womit
sehr viel Arbeit erspart wird. Allerdings ist diese Funktion auch noch nicht voll ausgereift.
Solr hatte Probleme damit den Text aus einigen PDF Dateien zu extrahieren und hatte
auch bei ZIP Dateien kein zufrieden stellendes Ergebnis geliefert. Diese Probleme sind der
Community von Solr bekannt und an der Lösung wird gearbeitet.
Sehr interessant finde ich die Art, wie Solr Texte abspeichert um eine performante Suche zu ermöglichen. Die Indizierung von Texten ist eine simple, aber effiziente Lösung,
die im Detail bei bestimmten Anwendungsfällen (z. B. Erkennen von Synonymen) sehr
komplex werden kann. Diese Herangehensweise an eine NoSQL Datenbank ist komplett
unterschiedlich zur Datenmodellierung bei herkömmlichen, relationalen Datenbanken wie
MySQL oder einer Oracle Datenbank. Viele Möglichkeiten, die relationale Datenbanken
bieten, sind mit Solr allerdings nicht realisierbar. Es ist also immer ein Abwägen, ob es
Sinn macht einen Teil aus einer relationalen Datenbank in die Solr Datenbank auszulagern
oder ob nicht die ausschließliche Nutzung von Solr die Lösung ist.
Es gibt Situationen in denen Solr, wenn man z. B. nur eine Suchfunktion in eine DesktopAnwendung integrieren möchte oder auf Funktionen zugreifen möchte, welche die Benutzung von Lucenes API Klassen erfordert, zu mächtig ist. In solchen Fällen ist Solr eher ein
Ballast statt eine Hilfe. Dann sollte das ,,Herz” von Solr, nämlich Lucene alleine genutzt
werden.
Das entstandene System wird nun in eine erste öffentliche Testphase gehen, in der eine
Abteilung von Atos Worldline die Monatsberichte und PMRs mit dem Sign Pad unterschreiben werden und diese in das System hochladen werden. Dabei wird vor allem darauf
geachtet werden, ob das System für die Mitarbeiter eine Vereinfachung der bestehenden Prozesse ist oder ob dadurch ein erheblicher Mehraufwand durch das Signieren und
Hochladen entsteht. Der Prozess in dem der Vorgesetzte die Monatsberichte seiner Angestellten bestätigt bedarf noch der Optimierung, die sich aus dem täglichen Umgang mit
dem System ergeben wird. Der Vorgesetzte muss beim derzeitigen Stand der Website die
Monatsberichte herunterladen, ein Archiv entpacken, die darin enthaltenden Dokumente
unterschreiben und in ein neues Archiv packen. Dieses Archiv muss dann auf der Website
wieder hochgeladen werden. Dieses Problem soll durch ein Java Applet gelöst werden, dass
in die Seite eingebunden wird. Mit Hilfe diesen Java Applets müssen die Berichte nicht
mehr heruntergeladen werden, sondern können direkt auf der Seite angezeigt und signiert
33
werden.
Ist diese Testphase beendet, werden neue Dokumente zu dem System hinzugefügt. Vorstellbar wären da als erster Schritt Urlaubsanträge.
34
Anhang
Monatsbericht
PersNr.
KSt.
7005452 DE09234010
KUZ
Kapaz. Sollstd.
fre 100,00
160
Monat
Jahr
10 2011
Felix
Remmel (Azubi)
3003000846
8,00
SAP Import 3003000846
Reisezeiten unbezahlt
920
8,00
ADE.AZUSNS SNS: Azubi-MaTA Stunden
23,50
10
Praktischer Teil-ATOS
20
Vorlesungen/Unterricht-RWTH
19,25
4,25
Iststunden
31,50
Sollstunden
160,00
Monatssaldo
-128,50
Übertrag Vormonat:
Saldo aktueller Monat:
Übertrag Folgemonat:
Urlaubskonto
Std.
Genommene
Urlaubstage
Genommene
Gleittage
Arbeitszeitkonto
Std.
52,00
0,00
52,00
30,00
0,00
30,00
2,00
0,00
2,00
-8,50
-128,50
-137,00
Angeordnete Arbeit zu ungünstigen Zeiten:
Datum
Uhrzeit von
Uhrzeit bis
Stunden
Bemerkung
Summe:
Datum:
Datum:
Unterschrift Mitarbeiter:
Unterschrift Vorgesetzter:
06.10.2011 13:15:23
MoBerZRT_AngMAZuZ2.rpt
fre
1,00
0,00
0,00
Page 1 of 1
2,00
Abbildung 1: Beispiel eines Monatsberichts
35
Abbildung 2: Login
Abbildung 3: Auswahl des Dokumententyps
36
Abbildung 4: Monatsbericht hinzufügen
Abbildung 5: Monatsbericht suchen
37
Abbildung 6: Unbestätigte Monatsberichte
Abbildung 7: PMR hinzufügen
38
Abbildung 8: PMR suchen
39
40
Literaturverzeichnis
[ama] Amazon simple db. Online verfügbar auf http://aws.amazon.com/de/simpledb/;
Zugriff 24.10.2011.
[cou] Couchdb. Online verfügbar auf http://couchdb.apache.org; Zugriff 24.10.2011.
[ela]
elasticsearch.
24.10.2011.
Online verfügbar auf http://www.elasticsearch.org/; Zugriff
[Ext] Extractingrequesthandler. Online verfügbar auf http://wiki.apache.org/solr/
ExtractingRequestHandler; Zugriff 17.10.2011.
[luca] Lucene. Online verfügbar auf http://lucene.apache.org; Zugriff 24.10.2011.
[lucb] Lucene benchmark. Online verfügbar auf http://lucene.apache.org/java/2_2_
0/benchmarks.html; Zugriff 24.10.2011.
[mon] Mongodb. Online verfügbar auf http://couchdb.apache.org; Zugriff 24.10.2011.
[nos] Nosql datenbanktypen. Online verfügbar auf http://de.wikipedia.org/wiki/
NoSQL_%28Konzept%29; Zugriff 20.10.2011.
[sola] Solr. Online verfügbar auf http://lucene.apache.org/solr/; Zugriff 24.10.2011.
[Solb] What is solr? Online verfügbar auf http://lucene.apache.org/solr/#intro;
Zugriff 07.10.2011.
[tik]
Supported document formats. Online verfügbar auf http://tika.apache.org/0.
5/formats.html; Zugriff 17.10.2011.
[tok] Analyzers, tokenizers, and token filters. Online verfügbar auf http://wiki.
apache.org/solr/AnalyzersTokenizersTokenFilters#TokenizerFactories;
Zugriff 09.10.2011.
41
42
Abbildungsverzeichnis
2.1
Ein Sign Pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1
3.2
3.3
3.4
3.5
Architektur der Website . . . . . . . . . . . . . . . . . . . . .
neuer PMR . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Use Case für die Suche nach einem PMR bzw. Monatsbericht.
Neuer Monatsbericht . . . . . . . . . . . . . . . . . . . . . . .
Löschen eines Monatsberichts bzw. PMRs . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
18
19
19
19
19
1
2
3
4
5
6
7
8
Beispiel eines Monatsberichts
Login . . . . . . . . . . . . .
Auswahl des Dokumententyps
Monatsbericht hinzufügen . .
Monatsbericht suchen . . . .
Unbestätigte Monatsberichte
PMR hinzufügen . . . . . . .
PMR suchen . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
35
36
36
37
37
38
38
39
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
43
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
44
Tabellenverzeichnis
3.1
3.2
3.3
3.4
3.5
3.6
3.7
Auszug von Datenbanktypen [nos] . . . . . . . . . . . . . . . . . . . . . . .
Die gespeicherten Texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Der Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gegenüberstellung verschiedener dokumentenorientierter NoSQL Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein paar in Lucene implementierte Tokenizer [tok] . . . . . . . . . . . . . .
Datenbankschema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Arbeitspakete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
9
9
10
11
12
15
20
46
Eidesstattliche Erklärung
Hiermit versichere ich, dass ich die Seminararbeit mit dem Thema
Konzeption und Realisierung eines Dokumentenablage- und -–recherchesystems auf Grundlage von neuen Datenbanktechnologien
selbstständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt habe, alle Ausführungen, die anderen Schriften wörtlich oder sinngemäß entnommen
wurden, kenntlich gemacht sind und die Arbeit in gleicher oder ähnlicher Fassung noch
nicht Bestandteil einer Studien- oder Prüfungsleistung war.
Name: Felix Remmel
Aachen, den 12. Dezember 2011
Herunterladen