Volltextsuche ohne Kompromisse

17. März 2019

Seit Version 7.4.1 unterstützt das womodo CMS "sprachspezifische Analyser" zum Volltext-indizieren von Inhalten.

Dabei werden Wörter von dem Einfügen in den Volltextindex auf ihren Wortstamm reduziert und "Stop-Wörter" wie "der", "ein", aus" (bei deutscher Sprache) entfernt.

Das führt zu dem gewünschten Effekt, daß bei einer Suche u. A. auch Mehrzahlbegriffe (Bild -> Bilder) gefunden werden.

Die Verwendung von sprachspezifischen Analysern hat aber Nachteile bei "Wildcard Queries", bei denen ein * am Ende des Suchbegriffs zum Ausdruck bringt, daß nach allen Wörtern gesucht werden soll, die mit dem Suchbegriff beginnen (Bilder* sollt auch Bildergalerie finden).

So funktionieren sprachspezifische Analyser

Beim Indizieren wird jedes einzelne Wort analysiert und typische deutschen Endungen entfernt. Das sind z. B. "e", "er", "en" oder "ung". Der verbleibende Wordteil wird dann im Index gespeichert.

Aus "Bilder" wird "Bild", aus "Tante" wird "Tant" - aber auch aus "Tanten" (Mehrzahl) wird ebenso "Tant".

Das Beispiel "Tante" zeigt dabei, daß diese Kürzungen algorithmisch durchgeführt werden. Es liegt kein Dictionary zugrunde, das die Sprache kennt. Man nennt dieses Verfahren "word stem".

Bei der Suche geschieht das Gleiche: Jeder einzelne Suchbegriff wird mit dem gleichen Verfahren vor der eigentlichen Suche gekürzt. Wenn nach "Tante" gesucht wird, wird tatsächlich intern nach "Tant" gesucht.

Der Vorteil liegt darin, daß bei der Suche nach "Tante" auch Dokumente gefunden werden, die "Tanten" (Mehrzahl) enthalten.

Wildcardsuchen

Bei Wildcardsuchen wird dieses Stem-Verfahren im Lucene-Query-Parser jedoch leider standardmäßg nicht angewandt.

Mit einer Suche nach "Tante*" bringe ich zum Ausdruck, daß ich Dokumente finden möchte, in denen Begriffe vorkommen (im Index enthalten sind), die mit "Tante" beginnen.

Eine Suche nach "Tante*" findet jedoch weder Dokumente, die "Tante" enthalten, noch solche, die "Tanten" enthalten. Das liegt daran, daß im Index tatsächlich die gekürzte Form "Tant" gespeichert ist und daher diese Index-Einträge nicht mit "Tante" beginnen.

Eine Suche nach "Tant*" würde dagegen alle diese Dokumente finden. Aber auf diese Idee kann kein User kommen.

Neuer Womodo Query Parser

Im kommenden Womodo 7.6.6 haben wir nun unseren eigenen Lucene-Query-Parser implementiert und sorgen damit dafür, das nun auch bei Wildcardsuchen das Stem-Verfahren vor der Suche angewandt wird.

Eine Suche nach "Tante*" sucht nun intern nach "Tant*" und findet damit die gewünschten Dokumente.

Nachteile?

Ja, es gibt auch Nachteile. So werden bei der Suche nach "Tante*" nun auch Dokumente gefunden, die "Tantal" enthalten. Das überrascht auf den ersten Blick, aber weil wir ja intern nach "Tant*" suchen, ist nun "Tantal" ein passender Treffer.

Während wir früher bei Wildcardsuchen also zu wenig Dokumente gefunden haben, finden wir nun tendenziell zu viele Dokumente.

Wir sind aber davon überzeugt, daß dies für den User der bessere Kompromiß ist. Denn etwas nicht zu finden ist bei weitem frustrierender, als einige Dokumente zu viel zu finden.

Hinweis

Diese Änderung in womodo 7.6.6 betrifft nur die Wildcardsuche. Suchen ohne Wildcards bleiben unverändert.