Wir haben ein paar Erkenntnisse aus einer Problemstellung mit Synonymen gewinnen können, die im Folgenden an einem fiktivem Beispiel erklärt werden sollen.
Dabei ist zu beachten:
Wir erstellen Synonyme immer zur Index-Zeit, wie von SOLR empfohlen!
Problem
Nehmen wir einmal an, wir betreiben eine Webseite für Naturliebhaber und möchten, dass eine Suche nach
Amsel oder
Drossel oder
Fink oder
Starr Artikel findet, in denen die jeweils genannte Vogelart als Term vorkommt.
Wenn ich jedoch nach
Vogel suche, möchte ich, dass nicht nur Artikel gefunden werden, in denen der Suchterm
Vogel enthalten ist, sondern auch jene Artikel gefunden werden, in denen der Suchterm zwar nicht vorkommt, jedoch eine Vogelart benannt wird.
Bisher haben wir das in der Synonymdeklaration wie folgt gelöst:
vogel, amsel, drossel, fink, starr
Hier ergibt sich jedoch ein Problem mit der Präzision der Suchergebnisse:
So findet eine Suche nach
Amsel per Definition auch Artikel, in denen es lediglich um
Finken oder
Drosseln etc. geht, ohne das eine Amsel erwähnt werden muss. SOLR verhält sich hier nämlich wie folgt:
Artikel A enthält als relevanten Begriff das Wort
Amsel.
Mit obiger Synonymdeklaration wird dann während der Indexierung nicht nur das Wort
Amsel mit in den Index aufgenommen, sondern ebenso alle o.g. Synonyme (
Drossel,
Fink,
Starr,
Vogel).
Ähnliches gilt für Artikel B, der nur das Wort
Fink enthält, und sonst keinen anderen der genannten Begriffe. Auch würden die Terme
Drossel,
Amsel,
Starr und
Vogel zu diesem Artikel in den Index aufgenommen werden.
Die Folge:
Eine Suche nach
Amsel würde nicht nur den Artikel A zurückliefern, sondern auch den Artikel B, wenngleich in B der Begriff
Amsel garnicht vorkommt. Gleiches gilt für den Suchbegriff
Fink, der ebenfalls beide Artikel liefern würde.
Eine Suche nach dem Begriff
Vogel würde gleichfalls beide Artikel liefern, was in diesem Fall auch richtig und gewollt wäre, den Mangel bei den beiden anderen Suchen aber nicht ausgleichen kann.
Was wir grundsätzlich wollen: Wenn man einen speziellen Suchbegriff eingibt, soll er spezielle Artikel finden, wenn wir einen Oberbegriff verwenden, soll ein breit gefächertes Ergebnis erscheinen.
Lösung
Zunächst einmal müssen wir entscheiden, welcher Begriff ein spezieller Begriff ist und welcher Begriff als Oberbegriff gilt. Diese Definition obliegt dem jeweiligen Datenbestand etc.
Im obigen Beispiel fällt die Einordnung leicht.
Amsel ist der Spezialbegriff,
Vogel der Oberbegriff.
Die Lösung für unser Problem iat das sogenannte
explizite Mapping.
Während das obige Beispiel für eine Synonymdeklaration unbestimmt ist und alles mit allem kombiniert, bietet das
explizite Mapping die Möglichkeit, festzulegen, welche Begriffe wie zueinander gemappt werden sollen.
In der Sache ist das ganz einfach, wobei es einen interessanten Knackpunkt gibt:
amsel => vogel
Hier wird unidirektional der Begriff Amsel durch den Begriff Vogel ersetzt!
Es ist nicht so, dass bei dieser Deklaration der sowohl
Amsel als auch
Vogel nach der Indexierung im Index vorhanden wären.
Eine Suche nach Amsel würde keinen Treffer ergeben,
weil alle Vorkommen des Worte Amsel durch das Wort Vogel ersetzt worden wären!
Die einfachste Lösung, die für uns gut funktioniert:
amsel => vogel, amsel
drossel => vogel, drossel
fink => vogel, fink
[...]
Jetzt verhält sich die Suche wie gewünscht: Eine Suche nach Amsel liefert wirklich nur Amsel-Artikel zurück, während die Suche nach dem Oberbegriff Vogel auch Artikel mit allen anderen Vogelarten findet.
Limitierungen
Die Pflege entsprechender Synonyme kann sehr mühselig und aufwendig sein. Aber das ist bei Synonymen unserer Erfahrung nach immer der Fall.