Allgemein
Auf Basis der Open Source Bibliothek „Lucene“ der Apache Software Foundation existiert seit WGA 3.2 eine für alle Content-Stores einheitliche Möglichkeit zur Volltextindizierung der Inhalte. Content-Stores können regelbasiert indiziert und über eine einheitliche Abfragesprache durchsucht werden. Dabei spielt es keine Rolle, welche Content-Store-Typen zum Einsatz kommen. Datenbankübergreifende Suchanfragen sind selbst in einer Mischumgebung aus Domino-Datenbanken und relationalen Datenbanksystemen möglich.
Bitte beachten sie, dass die Lucene-Volltextindizierung sehr flexibel konfiguriert werden kann. Alle auf dieser Seite aufgeführten Beispiele und Ergebnisse gehen von der Standard-Konfiguration aus. Sollte der Lucene-Volltextindex auf ihrem System anders konfiguriert sein, verhalten sich die hier vorgestellten Abfragen eventuell nicht wie beschrieben. Nähere Informationen zur Konfiguration des Lucene-Volltextindexes entnehmen sie bitte dem Administrationshandbuch.
Syntax
Im folgenden wird die am häufigsten verwendete Abfragesyntax für Lucene näher erläutert. Eine weiterführenden Dokumentation aller Abfragemöglichkeiten erhalten sie in der
Lucene-Dokumentation.
Eine Abfrage besteht aus mehreren Suchklauseln. Als Suchklausel kann sowohl ein einfacher Suchausdruck als auch eine Kombination aus Feldname und Suchausdruck verwendet werden. Eine Abfrage der Form
<tml:query type="lucene">
Content Management
</tml:query>
führt auf der aktuellen Datenbank eine Volltextsuche nach Dokumenten durch, die die Begriffe "Content" und "Management" enthalten. Bei dieser Suche werden alle Felder der Contentdokumente, sowie die Meta-Felder TITLE und DESCRIPTION berücksichtigt.
Um eine Suche auf ein bestimmtes Feld einzuschränken, kann in einer Suchklausel auch ein Feldname verwendet werden. Feldname und Suchausdruck werden mit hierbei mit ":" getrennt.
<feldname>:<Suchausdruck>
Die Feldnamen entsprechen den Feldern der Content-Dokumente und werden immer klein geschrieben.
Standardmäßig sind Lucene-Suchergebnisse nach Relevanz sortiert, d.h. Dokument mit den "besten Treffern" werden als erste angezeigt. Dies ist jedoch modifizierbar und kann durch eine Sortierung nach Itemwerten ersetzt werden.
Wurde ein Item als sortierbar indiziert so können die Lucene-Suchergebnisse nach seinem Inhalt sortiert werden.
Dazu wird das Attribut
options des Tags <tml:query> genutzt, in welchem kommaseparierte Suchoptionen angegeben werden können.
Eine Suchoption welche die Ergebnisse einer Lucene-Suche sortiert hat folgenden Aufbau:
- Das Präfix "sort:"
- Den Namen des Items, nach welchem sortiert werden soll, genauso wie er auch in einer Suchabfrage selbst formuliert werden würde
- Das Suffix "(asc)" oder "(desc)", je nachdem ob eine aufsteigende oder absteigende Sortierung gewünscht ist
Insgesamt sieht dies folgendermaßen aus:
<tml:query type="lucene" options="
sort: myitem (asc)">...Suchabfrage</tml:query>
Sie können auch nach den meisten Metadatenfeldern sortieren. Dazu geben sie den Namen des Metadatenfeldes anstelle eines Itemnamens an, und zwar komplett in Großbuchstaben, z.B.:
<tml:query type="lucene" options="
sort: TITLE (asc)">...Suchabfrage</tml:query>
Die Tabelle am Ende dieses Dokumentes dokumentiert, welche Metadatenfelder sortierbar sind.
Eine Sortierung nach mehreren Items oder Metadaten gleichzeitig ist derzeit nicht möglich.
Suchklauseln können mit verschiedenen Opertatoren verknüpft werden. Je
nach Operator steht dieser direkt vor einer Suchklausel oder zwischen
zwei Suchklauseln.
<Operator><feldname>:<Suchbegriff>
oder
<feldname>:<Suchbegriff> <Operator> <feldname>:<Suchbegriff>
Folgende Operatoren sind verfügbar:
Wildcards
Ein Suchausdruck kann zwei Arten von Wildcards enthalten.
Ein "?" ersetzt genau ein Zeichen.
Ein "*" ersetzt mehrere Zeichen innerhalb des Ausdrucks.
Wildcards dürfen nicht als erstes Zeichen eines Ausdrucks verwendet werden.
Suchbegriffe mit Leerzeichen
Sucht man in spezifischen Feldern nach Begriffen, die Leerzeichen enthalten, so ist folgendes zu beachten:
Der angegebene Feldname bezieht sich immer nur auf den direkt darauf folgenden Suchausdruck. Die Abfrage:
body:Content Management mit WGA
sucht im Feld body nur nach dem Begriff "Content". Da das Leerzeichen als Trenner für unterschiedliche Such-Termini gewertet wird gehören die folgenden Begriffe nicht mehr zur feld-spezifischen Suche. Die Begriffe "Management", "mit" und "WGA" werden ganz normal feld-unspezifisch gesucht, also in allen Items sowie den Metadaten-Feldern TITLE und DESCRIPTION.
Sollen alle diese Begriffe ausschließlich im Feld body gesucht werden, muss die Abfrage wie folgt formuliert werden:
body:Content body:Management body:mit body:WGA
Hierdurch wird auch ersichtlich, dass die Reihenfolge der Begriffe im Text beliebig sein kann. Will man dass diese Wortfolge in genau der angegebenen Reihenfolge ohne Zwischenworte gesucht wird, so muss man eine "exakte Suche" wie im folgenden Abschnitt verwenden.
Exakte Suche
Um eine exakte Suche nach einer Zeichenfolge durchzuführen, muss die Zeichenfolge in Anführungszeichen gesetzt werden. Z.B.:
body:"Content Management mit WGA"
Meta-Felder
Auch Meta-Felder eines Contentdokumentes werden von WGA indiziert und stehen zur Suche zur Verfügung. Meta-Felder werden in Großbuchstaben angegeben. Folgende Abfrage sucht nach allen Dokumenten, die im Titel den Begriff "Management" enthalten:
TITLE:Management
Eine Liste mit allen indizierten Metafeldern finden sie am Ende dieses Dokumentes.
Suche in den Inhalten von Datei-Anhängen
Will man gezielt nur nach Begriffen suchen, die sich in den Inhalten von Datei-Anhängen von Inhaltsdokumenten befinden, so kann der spezielle Item-Name "
allattachments" benutzt werden. Hierüber wird nur in den Inhalten von Datei-Anhängen gesucht, nicht jedoch in Items.
allattachments:"Content Management"
Suche nach Datumswerten und Zahlen
Die Lucenesuche basiert auf einem Volltextindex, indem alle Inhalte als String indiziert werden. Es wird also kein Unterschied zwischen Zahlen, Datumswerten und Texten gemacht. Dieser Umstand muss bei der Suche nach Datumswerten und Zahlen berücksichtig werden.
Datumswerte
Datumswerte werden von Lucene als Text im Format "yyyyMMddHHmmss" indiziert. Enthält ein Datum keine Uhrzeit, so sind die entsprechenden Felder 0. Der 01.09.2005 ist also im Index in der Form "20050901000000" gespeichert.
Eine Abfrage, die alle Dokumente liefert, die am 01.09.2005 geändert worden sind, wird wie folgt formuliert:
MODIFIED:20050901*
Meta-Felder wie "MODIFIED", die einen Datumswert enthalten, werden automatisch von Lucene in dieser Textform indiziert. Soll nach Datumswerten in Items gesucht werden, so muss dieses Item als "KEYWORD" indiziert werden. Die Einstellungen hierzu können im WGA-Manager an der Content-Store im Reiter "Lucene" durchgeführt werden:

Zahlen
Zahlen werden unverändert indiziert. Die Abfrage
VERSION:5
liefert alle Dokumente mit der Versionsnummer 5.
Für die Suche nach Zahlen in Items muss das Feld ebenfalls als "KEYWORD" indiziert werden. s.h. Datumswerte
Suchen in bestimmten Bereichen (von, bis)
Die Abfrage eines Feldes auf einen bestimmten Bereich (von, bis) ist über folgende Syntax möglich:
<feldname>:[<von> TO <bis>] oder
<feldname>:{<von> TO <bis>}
Die Suche mit [ ] ist inklusive der Werte <von> und <bis>. Es werden also auch Dokumente gefunden, die genau den Wert <von> oder den Wert <bis> im entsprechenden Feld enthalten. Die Suche mit { } ist exclusive der Werte <von> und <bis>. Das Suchergebnis enthält nur Dokumente zwischen den Werten <von> und <bis>.
Eine Abfrage, die alle Dokumente liefert, die zwischen dem 15.08.2005 und dem 01.09.2005 geändert worden sind, wird wie folgt formuliert:
MODIFIED:[20050815000000 TO 20050901235959]
Suchen nach größer oder kleiner als ...
Lucene unterstützt derzeit keine Abfragen auf größer oder kleiner. Diese Art der Abfragen können aber in eine Bereichssuche umgeschrieben werden. Möchten sie z.B. alle Dokumente finden, die nach dem 01.09.2005 geändert worden sind, so müssen sie die Abfrage als Bereichssuche mit einem fiktiven Enddatum definieren:
MODIFIED:{20050901000000 TO 20700101000000}
Alle Dokumente die vor dem 15.09.2005 erstellt wurden liefert folgende Abfrage mit dem fiktiven Anfangsdatum 01.01.1900:
MODIFIED:{19000101000000 TO 20050915000000}
Datenbankübergreifende Suchen
Mit Lucene ist es möglich, datenbankübergreifend Abfragen selbst bei unterschiedlichen Datenbanktypen (SQL, Domino) durchzuführen. Die Datenbank(en) auf die sich die Abfrage bezieht wird im Query-Tag über die Option "db" angegeben. Hier sind folgende Werte möglich:
Die Suchoption "
explain" kann dem Attribut "options" in Tag
<tml:query> mitgegeben werden, um Lucene dazu zu veranlassen,
mathematische Erläuterungen für die Gewichtung der Suchergebnisse
auszugeben. Diese Erläuterung kann als Metadaten-Feld
"searchExplanation" an Inhalten abgerufen werden, die per Lucene-Suche
ermittelt wurden.
<tml:collection>
<tml:query type="lucene" options="explain">...Abfrage...</tml:query>
<tml:foreach>
<tml:link> - <tml:meta name="searchExplanation"/> <br>
<tml:foreach>
</tml:collection>
Die
Erläuterung zeigt in einer mathematischen Darstellungsweise auf, welche
"Relevanz-Wertung" das Dokument erhalten hat und wie diese berechnet
wurde:
2.5275803 = sum of:
0.6440604 = weight($LUCENE_DBKEY:doc-wga40 in 2637), product of:
0.38211125 = queryWeight($LUCENE_DBKEY:doc-wga40), product of:
1.685531 = idf(docFreq=1976)
0.22670081 = queryNorm
1.685531 = fieldWeight($LUCENE_DBKEY:doc-wga40 in 2637), product of:
1.0 = tf(termFreq($LUCENE_DBKEY:doc-wga40)=1)
1.685531 = idf(docFreq=1976)
1.0 = fieldNorm(field=$LUCENE_DBKEY, doc=2637)
1.8835199 = weight(allcontent:system in 2637), product of:
0.9241163 = queryWeight(allcontent:system), product of:
4.07637 = idf(docFreq=180)
0.22670081 = queryNorm
2.038185 = fieldWeight(allcontent:system in 2637), product of:
2.0 = tf(termFreq(allcontent:system)=4)
4.07637 = idf(docFreq=180)
0.25 = fieldNorm(field=allcontent, doc=2637)
Details zur Auswertung dieser Erläuterung finden sie in der
Lucene-Dokumentation.
Lucene unterstützt die Ausgabe einer "Ergebnis-Relevanz" pro gefundenem Inhaltsdokument. Dies ist eine ungerade Zahl zwischen 0 und 1, welche anzeigt, wie gut das Dokument zu den gesuchten Begriffen "passt". Sie ist als Metadaten-Feld "SEARCHSCORE" an den gefundenen Dokumenten abfragbar.
Diese Relevanz wird aus einer Vielzahl von Informationen berechnet, z.B.:
- Anzahl der gefundenen Begriffe
- Position der gefundenen Begriffe in ihren Feldern
- "Boost"-Wert der Felder in denen der Begriff gefunden wurde
Werden die Ergebnisse von Lucene-Suchen ausgegeben, so will man unter Umständen, dass in der Ausgabe die Begriffe, nach welchen gesucht wurde, hervorgehoben dargestellt werden. Der WGA-Lucene-Volltextindex verfügt über eine Funktion um dies zu erreichen.
Dazu wird zunächst das Attribut
highlight am <tml:query>-Tag auf "true" gesetzt. Dies instruiert WGA die notwendigen Daten für das Highlighting der Suchergebnisse vorzuhalten.
Bei der Ausgabe der Suchergebnissen selbst sollte an <tml:item>-Tags ebenfalls das Attribut
highlight auf "true" gesetzt werden, um bei diesen Items die Hervorhebung zu aktivieren.
Zusätzlich muss über die Attribute
highlightprefix und
highlightsuffix des <tml:item>-Tags HTML-Code angegeben werden, der vor bzw. hinter die im Item vorhandenen Begriffe eingefügt werden soll um diese hervorzuheben.
Folgendes Beispiel umgibt hervorzuhebende Begriffe mit einem HTML-Span der CSS-Klasse "highlight":
<tml:item name="body" highlight="true"
highlightprefix="<span class="highlight">" highlightsuffix="</span>"/>
Die Inhalte von Items, in deren Inhalt sich die Suchbegriffe befinden die durch Lucene gefunden wurden, sind oft zu lang um komplett auf einer Ergebnisseite angezeigt zu werden. Daher besitzt WGA eine Funktion, welche aus einem Item mit gefundenen Suchbegriffen die "besten Fragmente" automatisch auswählt. Diese Fragmente sind jene mit gefundenen Suchbegriffen deren Auftreten die meisten "Relevanz" hat.
Diese Funktion ist als TMLScript-Methode
this.bestFragments() verfügbar. Sie bezieht sich immer auf die zuletzt ausgeführte Lucene-Suche. Als Parameter können sie angeben, wieviele Fragmente mit welcher Länge sie wünschen. Des weiteren können sie auch die Suchbegriffe durch benutzerdefinierte HTML-Codes hervorheben. Details entnehmen sie der Dokumenation dieser Funktion.