Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#11

AW: Relevanzsortierung bei Fulltext-Select

  Alt 22. Mär 2017, 15:29
Im Übrigen wäre meine Frage auch bei dem Punkt "vollständige Eingabe" mal bitte zu erläutern, was das denn bitte sein soll?
Wann weiß ein Entwickler oder ein Stück Code, wann mein Suchbegriff vollständig ist?
Nie, aber er soll entscheiden, wie bei vollständiger bzw. unvollständiger Eingabe zu verfahren ist.
Dabei muss er noch anwenderabhängig entscheiden, was vollständig bzw. unvollständig ist.

Und Relevanz ist immer das, was der Anwender gerade als besonders wichtig erachtet.

Naja, Sortierung immer nach dem, was ich in Order By eingebe, nie nach irgendwas, was irgendwie in der Datenbank implementiert ist. Das ist immer ein bisserl wie Lotto.

Relevanz ist subjektiv. Eine objektive Sortierung nach subjektiven Kriterien erscheint mir nicht wirklich möglich.

Das ist wie bei der Suche mit Google und Co.

Die suchen immer nach dem, was sie meinen, was der Anwender gemeint haben könnte. So gut wie nie einfach nur nach dem, was man eingegeben hat. Und wenn man da mehrere Suchbegriffe mit und verknüpft haben möchte, dann machen die halt doch ein oder. Und auch nicht zwingend mit allen Suchbegriffen, sondern nur mit denen, von denen sie meinen, das sie relevant sein könnten.
Entsprechend schwierig ist es, effektiv nach bestimmten Begriffen / Begriffskombinationen zu suchen und nur die für einen persönlich relevanten Ergebnisse zu bekommen.

Zum obigen Beispiel:

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. Woher sollte die Datenbank denn wissen, welche der auf "Optiset E Stand" folgenden Zeichenfolgen in der Ergebnismenge für den Anwender wichtiger sein könnten. Dazu müsste sie mehr Information über die Bedeutung des Datenbankinhaltes haben, also über Wissen verfügen.

Hier wäre, wenn man da eine weitere Sortierung haben will, eine Ergänzung des Order By zwingend erforderlich.

Also z. B.
SQL-Code:
SELECT name,
       MATCH(name) AGAINST ('+optiset +stand*IN BOOLEAN MODE)
FROM products_description
WHERE language_id=2
  AND MATCH(name) AGAINST ('+optiset +stand*IN BOOLEAN MODE)
ORDER BY MATCH (name) AGAINST ('+optiset +stand*IN BOOLEAN MODE) DESC, Name, levenshtein(name, 'optiset stand');
Wobei mir bei einer unvollständigen Eingabe, wie in diesem Beispiel, die Levenshtein-Distanz nicht wirklich sinnvoll erscheint.

(Die Levenshtein-Distanz in MySQL)

Oder die Tabelle müsste eine Relevanzspalte enthalten, in der vom Nutzer ein Wert für die Relevanz hinterlegt wird. Gleicher Wert = gleiche Relevanz. Kleinerer Wert = kleinere Relevanz. Diese Spalte muss dann mit ins Order By ... Relevanzspalte desc.
  Mit Zitat antworten Zitat