Während der letzten Jahre bin ich immer mehr dahin gekommen, zu behaupten, dass man
- nicht wissen muss, wo etwas steht
- sondern es ausreicht, wenn man es einfach nur findet.
Praxisbeispiel
Wenn ich im Siedlerforum die Portfreigabe für Router suche muss ich wissen, dass ich das im folgenden Forum finde: Siedler 3
Community Foren-Übersicht » Router & Firewall » Screenshot der verschiedenen Geräte
Ich weiß das auch, weil ich jahrelang in der Community aktiv war.
Jemand der dieses Wissen nicht hat, muss die Information trotzdem finden. Es wäre schön, wenn er mithilfe der Suchfunktion seine
Informationen erhält.
Qualität der Suchfunktion
Ich möchte in diesem Beitrag die Tatsache außer Acht lassen, dass Syntax unterschiedliche Symantik haben kann, sprich, dass das Wort
"Bank" einmal die Bezeichnung für ein Kreditinstitut sein kann und andererseits eine Sitzgelegenheit.
Jetzt kommt hinzu, dass man bei trivialen Suchen exakt die Wörter eingeben muss, die sich auch im zu findenden Text befinden. So
erging es mir auf Arbeit, das ich nach "Lageplan" gesucht habe und 0 Suchergebnisse geliefert bekam. Eine Weile später habe ich die
gesuchte Seite durch folgen von verschiedenen Links gefunden und bemerkte, dass sie statt des Wortes "Lageplan" das Wort
"Lagepläne" beinhaltete und mir deshalb keine Suchergebnisse angezeigt wurden.
Algorithmus für bessere Suchfunktionen
Um bei Flexion der Wörter, Tippfehler und Rechtschreibfehlern dennoch Suchergebnisse zu liefern, kann man folgenden Algorithmus
einsetzen:
Man teilt das Wort in überlappende Buchstabenfolgen von je 3 Buchstaben und sucht danach.
Stellen wir uns vor, es gäbe zwei Datensätze:
1) "Hier finden Sie die Lagepläne unser Gelände in ganz Deutschland."
2) "Der Gepaart jagt in Afrika"
Man sucht nun nach "Lageplan"
Dieses Wort liefert die folgenden Dreierbuchstabenfolgen:
Lag
age
gep
epl
pla
lan
Die Dreierbuchstabenfolgen finden sich teilweise in den Datensätzen wieder (Caseinsensitive):
1) "Hier finden Sie die Lagepläne unser Gelände in ganz Deutschland."
2) "Der Gepaart jagt in Afrika"
5 der 6 Dreierbuchstabenfolgen werden im 1. Datensatz gefunden.
1 der 6 Dreieerbuchstabenfolgen werden im 2. Datensatz gefunden.
Sortiert man nun die Anzeige der gefundenen Datensätze absteigend danach, wie viele Dreierbuchstabenfolgen gefunden wurden,
befinden sich die relevanten Datensätze oben und die Fehltreffer unten.
Das Fehltreffer angezeigt werden ist entweder nicht schlimm, da man sie ohnehin nicht liest, weil man gleich oben den richtigen Treffer
hat oder nicht schlimm, weil man ab einer bestimmten Anzeige die Liste abschneiden kann.
Abschneiden deshalb, weil dieses Beispiel nur zwei Datensätze beinhaltet. Würden viele tausend Datensätze existieren und der Suchende
erhält eine lange Trefferliste, findet er entweder in den ersten Datensätzen seinen gesuchten Datensatz, oder falls es sehr viele
Datensätze zu seinem Thema gibt, wird er dazu verleitet, die Suche weiter zu spezifizieren.
Im oben genannten Beispiel sähe das so aus, dass dem Suchwort "Lageplan" "Deutschland" hinzugefügt wird: "Lageplan Deutschland"
Dabei würde ein Tippfehler "Lageplan Duetschland" voraussichtlich die gleiche Auflistung von Treffern erziehlen.
Meine Frage
Ich stell mir die Frage, wie man mithilfe von SQL die Sortierreihenfolge festlegen kann.
Mit folgendem SQL Request erhält man die Datensätze:
SELECT datensatz
FROM datensaetze
WHERE
LOWER(datensatz) LIKE 'lag' OR
LOWER(datensatz) LIKE 'age' OR
LOWER(datensatz) LIKE 'gep' OR
LOWER(datensatz) LIKE 'epl' OR
LOWER(datensatz) LIKE 'pla' OR
LOWER(datensatz) LIKE 'lan'
(Denkt euch Prozentzeichen um die Suchstrings, die konnte das Forum nicht darstellen.
Hat jemand eine Idee, wie man ermitteln kann, wieviele der gesuchten Dreierbuchstabenfolgen gefunen wurden, um danach zu
sortieren?
lg Stephan
Hinweis
Nach Klick auf "OK" wird eine Verbindung zu Facebook oder twitter hergestellt. Dadurch werden ggfs. Daten an diese Plattformen übermittelt.