Die Suche in Ihrem Mitarbeiterportal
comundus realisiert auf Basis von OpenCms Mitarbeiterportale und Internetauftritte. In beiden Unternehmenslösungen spielt die Suche eine zentrale Rolle. Eine intelligente Suchfunktion kann darüber entscheiden, ob aus Besuchern Kunden werden und Mitarbeiter effizient und effektiv ihr Wissen teilen können.
OpenCms Suche mit Lucene
Die Suche in OpenCms basiert auf dem Lucene Framework. Die Jakarta Lucene ist eine leistungsstarke, voll funktionsfähige Text-Such-Engine, geschrieben in Java. Sie ist eine Technologie, die für fast jede mögliche Anwendung verwendbar ist. Lucene ist allerdings keine fertige Suchmaschine, sondern stellt Klassen und Funktionen zur Verfügung, um für beliebige Projekte eine eigene Suchmaschine zu bauen. Lucene unterstützt standardmäßig reichhaltige Suchoptionen.
Verhalten von OpenCms und Lucene
- OpenCms erkennt, dass eine neue Ressource in die Suche aufgenommen werden soll.
- OpenCms schaut, um welche Ressourcenart es sich handelt und extrahiert suchrelevante Daten - bei XmlContent z.B. Titel, Body, Dateipfad des Anhangs etc., bei Bildern z.B. Bildname, Bildpfad, etc. als Text.
- OpenCms ruft Lucene auf und übergibt die aus der neuen Ressource extrahierten suchrelevanten Daten; dabei kann OpenCms noch angeben, ob diese eine besondere Gewichtung - "boost" - haben sollen. Außerdem wird Text, welcher aus wenigen Einzelwörtern besteht, höher gewichtet. So z.B. beim Titel, der oft nur aus einem Wort besteht im Gegensatz zum Content, der aus tausenden Wörtern bestehen kann.
- Lucene untersucht den von OpenCms übergebenen Text und schreibt Informationen über die Häufigkeit der im Text enthaltenen Worte sowie deren Relevanz in den Index.
Folgende Operatoren bietet die Lucene Engine in OpenCms:
Fuzzy Suche
um eine undeutliche Suche zu formulieren wird das Tilde-Symbol ("~") verwendet
Beispiel: "seit~" liefert: Seite, seinen, weitere, Leiter...
Boolesche Suche
Verknüpfen von Wörtern mit UND, OR, AND
Beispiel: "Guten AND Tag" – beide Begriffe sollen vorkommen
Beispiel: "Tag NOT guten" – "Tag" soll vorkommen "gut" soll nicht vorkommen
Proximity Suche/Distanzsuche
"Guten wiedersehen"~10
(zeigt Ergebnisse, in dem die beiden Wörter maximal 10 Wörter zwischen sich haben)
Wildcard
Platzhalter (?,*) z. B. te?t
Die Suche ist über Platzhalter möglich, aber nicht am Anfang des Wortes:
z. B. *wort, *gang geht nicht
z. B. Haus*, Baum* geht
Einer der vielen Operatoren von Lucene ist die Wildcard. Ein Platzhalter gleich * kann am Ende oder in der Mitte eines Wortes gesetzt werden. Es zeigt sich, dass Kunden erwarten, dass eine Suche über Platzhalter am Anfang des Wortes möglich ist. Das Problem wird wie folgt gelöst: Es gibt eine Methode in der Klasse QueryParser. Mit dem Aufruf QueryParser.setAllowLeadingWildcard (true) kann man dies aktivieren. Nachteil, die Suchperformance leidet ordentlich.
Mehr zum Thema Wildcardsuche finden Sie im Lucene Wiki.
Feldsuche
Lucene unterstützt Felddaten
Beispiel: "title:Seitentitel AND text: Inhalt".
Bereichssuche
Ein Bereich kann zum Beispiel ein Zeitraum sein (Erstelldatum zwischen 01.01.2011 und 08.01.2011 - inklusiv den beiden Tagen):
"created: [20110101 TO 20110108]"
oder exklusiv den beiden Tagen sein:
"created: {20110101 TO 20110108}"
Verstärkungsfaktor
Verstärkungsfaktor einem Tag zuordnen. Mit dem "^"-Symbol.
"Tag^4 du" "Tag" wird 4 x stärker als "du" gewichtet
Die Beschreibung weiterer Funktionen stehen im Dokument OpenCms und Lucene zum Download als PDF bereit.
