Headerbild: Stichwortsuche mit Java/MySQL

Volltextdatenbank mit MySQL und Java


Die Realisierung einer Volltextdatenbank mit MySQL und Java ist einfach. Ein Teilnehmer meines Seminars „MySQL – Vom Anfänger zum Experten“ hat mich auf die Idee gebracht. Der Teilnehmer wünschte sich eine Datenbank, die ihm hilft, die Videos zu bestimmten Aspekten des Seminars schnell wiederfinden zu können. Bei 151 Lektionen kann der Überblick, in welcher Lektion was genau behandelt wurde, tatsächlich schnell verloren gehen.

Nun, ich habe mir diesen geäußerten Wunsch zu eigen gemacht. Ich skizziere hier, wie man sich eine Volltextdatenbank mit MySQL und Java zur Stichwortsuche schnell und einfach implementieren kann. Das hier vorgestellte Projekt stellt keine vollumfängliche Anwendung dar. Der Code mag vielmehr Anregung für alle Interessierten sein, sich eine eigene Anwendung, ganz nach den persönlichen Bedürfnissen, zu bauen.

Anwendungsanforderungen

Es soll eine Datenbank entwickelt werden, die

  • Stichworte,
  • Erläuterungen und einen
  • Verweis auf die Seminarlektion

enthält. Die Datenbank soll mittels Volltextsuche durchsucht werden können. Das Suchen soll von der Kommandozeile initiiert werden können, ohne erst ein anderes Datenbankwerkzeug starten zu müssen.

Das sind die Minimalanforderungen. Ohne viel Phantasie, kann sich jeder ausmalen, die gespeicherten Daten auszuweiten. So wäre es durchaus sinnvoll, die Lehrinhalte verschiedener Seminare in der Datenbank zu speichern. Ein entsprechender Hinweis auf das Seminar wäre dann wünschenswert. Ebenfalls denkbar ist es, Bücher, Zeitschriftenartikel mit entsprechenden Quellenverweisen zu integrieren. – Der Phantasie sind da kaum Grenzen gesetzt.

An dieser Stelle werde ich lediglich ein einfaches Client-Programm vorstellen, mit dem die Daten aus der Datenbank abgefragt werden können. Auch dieses mag ausgebaut werden. Es könnte dahingehend ausgestaltet werden, auch Datensätze darüber pflegen zu können und eine grafische Benutzeroberfläche wäre auch schön. Ebenfalls verlockend können verschiedene Ausgabeformate sein, wie beispielsweise bibtex, um Literaturangaben in LaTeX übernehmen zu können.

Systemanforderungen

Um eine Stichwortdatenbank mit MySQL und Java erstellen zu können, brauchen wir mindestens

  • Zugang zu einem MySQL-Server
  • und eine Java-Entwicklungsumgebung (JDK).

Den MySQL-Server können wir uns als Community-Edition von der MySQL-Homepage herunterladen. Dort finden wir ebenso den Java-Connector für MySQL (Connector/J). Weil ein Terminalprogramm seine Parameter üblicherweise in Form von Kommandozeilenargumenten empfängt, müssen wir in der Lage sein, die Kommandozeile zu parsen. Dazu habe ich hier commons-cli von Apache verwendet. Zu alledem brauchen wir natürlich auch noch das JDK.

Hier ist die Zusammenstellung der Links, zu den benötigten Ingredienzien:

Statt des hier verlinkten Oracle JDK kann natürlich auch OpenJDK verwendet werden.

Wenn nicht bereits geschehen, sind der MySQL-Server und auch das JDK zu installieren. Der Java-Connector beziehungsweise der Kommandozeilen-Perser sind im Klassensuchpfad für Java aufzunehmen. Unter macOS/Linux sieht das so aus:

Die angegebenen Namen sind bei mir Links auf die echten Archivdateien, deren Namen etwas länger sind. Bei macOS sollte dies in der .bash_profile, unter Linux in der .profile stehen. Windows-Anwender setzen den Klassenpfad unter den Umgebungsvariablen in der Systemsteuerung.

Datenbank anlegen

Die Anforderungen an unsere Stichwort-Datenbank sind (im Moment) sehr gering. Es reicht eine einzige Tabelle. Um sie jedoch von anderen Projekten abzugrenzen, soll dieser Tabelle eine eigene Datenbank spendiert werden.

Wird das Projekt weiter ausgebaut, wird es im Mehrbenutzerbetrieb mit unterschiedlichen Berechtigungen für die Anwender verwendet, mag eine dedizierte Datenbank tatsächlich wünschenswert sein.

Hier nun das SQL-Skript. Es erzeugt eine Datenbank, legt die (derzeit einzige) Tabelle und einen Beispielanwender namens stwsucher an. Dieser Anwender kann und darf lediglich Daten abfragen.

Dieses Skript beherbergt wenig Geheimnisse. Nennenswert ist jedoch das Attribut FTS_DOC_ID. Das Attribut wird von MySQL benötigt, um eine Volltextsuche zu gestatten beziehungsweise einen Volltextindex zu erstellen. Fehlt es, wird es von MySQL automatisch angelegt. Die Erzeugung des Volltextindizes wirft dann eine Warnung aus. Der Volltextindex wird wie jeder andere Index auch erzeugt. Allerdings wird das Schlüsselwort FULLTEXT verwendet. Im Beispiel werden die Spalten stichwort und beschreibung indiziert.

MySQL unterstützt verschiedene Formen der Volltextsuche. Diese lassen sich in der MySQL-Dokumentation unter der Überschrift Full-Text Search Functions nachlesen. Das hier vorgestellte Java-Programm verwendet lediglich die Modi NATURAL LANGUAGE und BOOLEAN. Bei der booleschen Suche stehen die folgende Operatoren zur Verfügung:

  • + bedeutet AND
  • - bedeute NOT
  • [kein Operator] bedeutet OR

Damit lassen sich dann zum Beispiel folgende Abfragen formulieren:

stichwort beschreibung lektion
create table Tabelle mit mehreren Spalten erstellen 11
create table Tabelle erstellen 10

stichwort beschreibung lektion
create table Tabelle mit mehreren Spalten erstellen 11

Die zweite Abfrage ist konkreter, weil sie zwingend das gemeinsame Vorkommen zweier Worte fordert.

Java-Client

Der folgende Programmcode zeigt beispielhaft den grundsätzlichen Aufbau eines Java-Programms, welches auf eine MySQL-Datenbank zugreift. Es verbleibt noch viel Luft nach oben. Fest im Programmcode verankerte Benutzerdaten, und andere Dinge mehr, sind kein guter Stil. Zur Verdeutlichung mag der Code aber ausreichen.

Das Programm zeigt ganz rudimentär die erforderlichen Schritte, sich mit einer MySQL-Datenbank zu verbinden und Daten abzufragen.

Eine Beispielsitzung unter macOS oder Linux könnte so ausschauen:

Fazit

Der Bedarf an Optimierungen und Erweiterungen ist unübersehbar. Das Prinzip, wie eine Stichwortdatenbank mit MySQL und Java aufgebaut und implementiert werden kann, sollte aber offensichtlich sein. – Es ist nicht schwierig.

Laden Sie hier den Beispielcode herunter.

DOWNLOAD

Auf Basis der oben gezeigten Grundlagen können leicht weitere Features implementiert werden, so dass das Beispiel schnell zu einer „ausgewachsenen Anwendung“ wachsen kann. – Viel Spaß dabei!

Karsten Brodmann

Karsten Brodmann

Karsten Brodmann hat an der Universität Osnabrück BWL/Wirtschaftsinformatik studiert. Er hat viele Jahre in der IT gearbeitet und dort Web- und Datenbankanwendungen entwickelt. Seit Gründung der Punkt-Akademie veröffentlicht Karsten Brodmann auch Schulungsvideos zur Datenbankentwicklung, Unix und Programmierung bei Udemy. In seiner Freizeit fotografiert Karsten Brodmann gerne. Seit vielen Jahren fotografiert er analog und digital. Dabei behält er jeweils den gesamten Workflow in der eigenen Hand, von der Aufnahme über die Dunkelkammer oder auch den Scanner sowie die Bildbearbeitung und den Ausdruck am PC.

Weitere Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert