Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: Relevanzsortierung bei Fulltext-Select

  Alt 23. Mär 2017, 08:39
Über das Thema Relevanz sind ja schon ganze Dissertationen verfasst worden, ohne dem Problem wirklich näher zu kommen. Da spielt so viel mit rein. Von Kulturkreis bis was der Suchende gefrühstückt hat. Google verwendet Unsummen auf seinen Algorithmus, KI und ähnliches, ist auch schon ziemlich gut (im technischen Sinne) geworden.

Wobei man da ja Äpfel und Birnen vergleicht, denn Google muss die Inhalte unterschiedlicher Webseiten vergleichen und ranken, was zum Konfliktfeld SEO führt. Ich bewege mich aber innerhalb einer Datenbank auf einer Webseite und habe zudem noch halbwegs semantisch ordentliche Daten.

Im vorliegenden Fall wäre Relevanz recht einfach zu definieren: Ein möglichst großer Anteil dessen was der Suchende eingegeben hat im Feld "name" und ein möglichst kleiner Differenzanteil, also was in name vorhanden aber nicht im Suchbegriff angegeben ist. Entsprechend sollte das Ranking sein.

Im übrigen funktioniert die Boolesche MATCH-Methode genau so lange gut, bis der User Zahlen eingibt. Genauer gesagt, alphanumerische Zeichenfolgen und reine Zahlenfolgen, durch Leerzeichen getrennt. Dann kommt der Algorithmus wieder ins Schleudern und liefert nur Nonsens.

Interessant wären die nicht selektierten Daten.
Gibt es darunter "Optiset"?
Ich habe das nur der Übersichtlichkeit halber gekürzt. Alle Suchergebnisse BEGINNEN mit "Optiset", es werden jedoch keine Datensätze gefunden, wo "Optiset" an einer anderen Stelle im Text (also nicht am Beginn des Strings) vorkommt.

Der Relevanzwert 4.073927879333496 bezieht sich wohl bei allen Zeilen der Ergebnismenge auf den Anteil dessen, der dem Suchbegriff entspricht. Bei allen ist "Optiset E Stand" identisch und resultiert wohl aus "+optiset +stand*". Diese beiden Werte kommen überall vor und damit sind sie gleich relevant. Von daher kann sich der Wert nicht unterscheiden.
Eben genau das ist im NATURAL LANGUAGE MODE ja nicht der Fall. Da wurden auch Datensätze gefunden, in denen nur einer der beiden Suchbegriffe, nämlich "Optiset" vorkommt, nicht jedoch das zweite Wort(fragment) "stand". Obendrein wurden solche "Teiltreffer" dann sogar noch höher gerankt. Bzw. eigentlich war gar kein sinnvolles Ranking-Schema zu erkennen.

Mit der Levenshtein-Distanz hätte ich insofern ein Problem, als dass es sich um eine MariaDB und nicht MySQL handelt, weshalb das besagte Modul nicht (binär-)kompatibel ist und obendrein der ganze Brassel auch noch auf Windows läuft. Bliebe hier nur die Implementation in einer Mysql-Funktion, was performancetechnisch, sagen wir mal, zweifelhaft ist.

Es erklärt im Grunde aber die besch.. Ausgabe in gefühlt jedem 1. Webshop mit sortierung nach "Relevanz"
Da stimme ich 100%ig zu. Denn wenn man zu der Fragestellung recherchiert, findet man eigentlich nur zwei Varianten, das mit MySQL/MariaDB zu realisieren: Entweder durch einfache "feld LIKE '%wort_aus_suchbegriff%' AND feld LIKE '%anderes_wort_aus_suchbegriff%'" oder eben die Variante MATCH AGAINST. In meinem Fall habe ich mit der LIKE-AND-Methode bessere Ergebnisse, wobei BESSER nicht bedeutet GUT, sondern nur WENIGER SCHLECHT. Außerdem ist dann zwar die Gesamt-Ergebnismenge passend, ein sinnvolles Ranking habe ich dann aber immer noch nicht - was der eigentliche Grund für meine Experimente mit MATCH-AGAINST war.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (23. Mär 2017 um 08:46 Uhr)
  Mit Zitat antworten Zitat