Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

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

Relevanzsortierung bei Fulltext-Select

  Alt 22. Mär 2017, 10:02
Datenbank: MariaDB • Version: 10 • Zugriff über: PHP
Moin!

Ich habe vor, Suchergebnisse von Artikelnamen sortiert nach Relevanz auszugeben. Hat jetzt nichts mit Delphi zu tun, diesmal PHP. Aber das Kernproblem liegt bei der Datenbankabfrage. In einer Tabelle liegen Artikeltexte (Namen, Beschreibungen, Keywords etc.). Auf einer Ajax-Webseite gibt es ein Suchfeld, welches interaktiv während der Eingabe von Suchbegriffen eine Vorschlagsliste als Dropdownmenü anzeigt und laufend bei Keypresses aktualisiert. Die Ausgabe dieser Suchvorschläge möchte ich relevanzsortieren, sodass die passendsten Ergebnisse immer oben stehen. Dazu habe ich mir folgende Query ausgedacht:
Code:
SELECT name
FROM products_description
WHERE language_id=2
  AND MATCH(name) AGAINST ('optiset standard' IN NATURAL LANGUAGE MODE)
ORDER BY MATCH (name) AGAINST ('optiset standard' IN NATURAL LANGUAGE MODE) DESC
Dabei kommt folgendes Ergebnis heraus (auszugsweise):
Code:
Optiset E Standard
Optiset E Standard
Optiset E Standard
Optiset E Standard
Optiset E Standard
Optiset E Standard Gehäuse
Optiset E Standard Bodenwanne
Optiset E Standard Tastengitter Wahl Made in Germany
Optiset E Standard Tasten 8er Made in Germany
Optiset E Standard Plusminus Tasten Made in Germany
Optiset E Standard/Advance Tasten
Optiset E Standard/Advance Display Unterschale
Optiset E Standard/Advance Display Unterschale
Optiset E Standard/Advance Display Oberschale
Optiset E Standard/Advance Funktionstasten 8er-Block
Optiset E Standard/Advance Funktionstasten 4er-Block
Optiset E Standard/Advance/Memory Tasten Lautstärke (Plus und Minus)
Optiset E Standard/Advance Navigationstasten
Optiset E Standard/Advance Display Oberschale
Optiset E Standard/Advance Display Unterschale
Soweit sieht das Suchergebnis auch gut aus, eigentlich wie ich es brauche. Der Suchbegriff war hier "optiset standard", voll ausgeschrieben. Da die Suchvorschläge aber interaktiv sind, baut sich der Suchbegriff auch erst sukzessive während der User-Eingabe auf. Wenn man einen unvollständigen Suchbegriff (z.B. "optiset stand") in die selbe Query wirft, kommt folgendes bei raus:
Code:
Optiset E Standard
Optiset E Entry
Optiset E Advance plus
Optiset E Memory
Optiset E Memory
Optiset E Entry
Optiset E Basic
Optiset E Basic
Optiset E Basic
Optiset E Basic
Optiset E Standard
Optiset E Standard
Optiset E Standard
Optiset E Standard
Optiset E Advance
Optiset E Advance
Optiset E Advance plus
Optiset E Advance plus
Optiset E Advance Conference
Optiset E Advance Conference
Optiset E Memory
Optiset E Memory
Optiset E Memory
Optiset E Key Module
Optiset E Key Module
Optiset E Key Module
Wie man sieht, ist dann die Relevanzsortierung beim Teufel. Nur wie kommt das und vorallem, wie stellt man das ab?
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
  Mit Zitat antworten Zitat