lunr Volltextsuche findet nicht alle Ergebnisse

Veröffentlicht von Ulf Joksch am 18.02.2021

lunr Volltextsuche liefert nicht alle Ergebnisse

Ein Kunde von mir betreibt eine kleine Intranet-Webseite auf Basis von Typemill mit einem Search-Plugin, welches auf lunrjs basiert.

Folgender Code war im Search-Plugin implementiert

var term = document.getElementById('searchField').value;
var results = searchIndex.search(term);

Die Suche funktionierte grundsätzlich. Soabld ich aber nur nach einem Teilstring suchte, bekam ich keine Ergebnisse, sondern nur dann, wenn ich nach einem ganzen Wort gesucht habe.

Also, die Suche nach Daten lieferte mir alle Artikel in denen das Alleinstehnde Wort Daten vorkam. Sucht ich allerdings nur nach ate, bekam ich keine Treffer.

Klar, dachte icht mir, ich ergänze den Suchbegriff vorne und hinten einfach mit einem Wildcard-*

Nun kann man von einem durchschnittlichen Benutzer nicht erwarten, dass er seinen Suchbegriff vorne und hinten mit einem Sternchen versieht. Also änderte ich den Code des Plugins folgendermaßen ab:

var term = document.getElementById('searchField').value;
term = '*' + term + '*'
var results = searchIndex.search(term);

Und siehe da, alles schien wunderbar zu funktionieren.

Kurz darauf suchte ich nach dem Begriff iPhone und musste feststellen, dass ich keinen Treffer ehielt, obwohl es zwei Artikel gab, in denen dieser Begrif vorkam. Hmmm?! Mit meiner Wildcard-Ergänzung habe ich die Search-Engine wohl ihrer Fähigkeit beraubt, ganze Worte zu finden. Die Suche nach Phon funktionierte einwandfrei, iPhone nicht.

Beheben konnte ich diese Einschränkung mit einer erneuten Ergänzung des Codes:

var term = document.getElementById('searchField').value;
var term2 = term
term = '*'+term+'*';
var results = searchIndex.search(term + ' ' + term2);

Jetzt findet die Suche tatsächlich alle Vorkommnisse, sei es ein Teilstring oder auch ein ganzes Wort.

:-D