Datenbanksuche: Meinten Sie ...

splat

Erfahrenes Mitglied
Hallo nochmal...

ich hatte vor 2 Jahren schon einmal einen ähnlichen Thread eröffnet, doch darin wurde gefragt wie man ein "Meinten Sie.." bzw das vergleichen zweier Strings am besten realisieren könnte.
Jetzt habe ich mich nochmal rangesetzt und das ganze funktioniert dank des Levenshtein Algorithmus wunderbar. Doch natürlich nur, wenn man auch die (richtigen) Begriffe zum Vergleich vorliegen hat.

Angenommen ich habe eine Tabelle mit 20000 versch. Artikeln. Die Suche mache ich mit MySQL über
PHP:
WHERE MATCH('productname') AGAINST ('$string')
Die richtigen Ergebnisse liefert er also schon, das ist nicht das Problem. Doch wenn man nun einen weiteren Vorschlag machen soll, dann muss man ja irgendwo den Suchstring mit einer Liste von Treffern vergleichen. Drum habe ich mir gedacht, ich speichere einfach alle Suchstrings welche brauchbare Ergebnisse liefern, in einer Tabelle. Diese Strings verwende ich dann zum Vergleich.

Es dauert zwar seine Zeit bis die Tabelle mit Einträgen gefüllt wird, aber nach einer Woche stelle ich nun fest, das die Vorschläge immer besser werden. Sie Suche lernt sozusagen :)
Nun bin ich noch am optimieren diverser Dinge:
- Es werden nur strings gespeichert, die länger sind als 3 Zeichen.
- Wenn in der Tabelle nach einem ähnlichen String gesucht wird, und mehrere mit der selben Ähnlichkeit gefunden werden, dann wird nur der String ausgegeben, welcher am häufigsten gesucht wurde. Dadurch soll vermieden werden, das Falscheinträge vorgeschlagen werden. (z.B. wenn sich jemand vertippt, aber trotzdem etwas gefunden hat. Dann landet das ja auch in der Datenbank) Zudem werden alte Einträge über den timestamp gelöscht, also verschwinden die falschen Einträge auch wieder von selbst.
- Die IP wird ebenso mitgespeichert und nach einer gewissen Anzahl von Einträgen wird man geblockt. Ansonsten könnte man einfach auf die Idee kommen 100 mal den gleichen Tippfehler einzugeben, und dieser wird später mal angeboten... das würde ja nicht gut aussehen. Spamschutz wäre also auch schon drin.
- Ein Vorschlag wird nochmals auf Suchergebnisse geprüft. Gibt es keine Ergebnisse mehr, wird dieser aus der Tabelle gelöscht und es wird erneut nach einem Vorschlag gesucht.
Hört sich vielleicht etwas viel an, aber das ganze ist doch sehr fix.

Jetzt würde ich einfach nur gerne mal von anderen hören, ob noch jemand eine Idee hat, oder mir vielleicht noch Dinge nennt, an die ich bisher noch gar nicht gedacht habe.
Ich würde alles gerne so gestalten, das man nichts mehr zu warten hat. Eine feste Tabelle mit Stichworten der Produkte wäre natürlich besser (da keine Falscheinträge), aber diese muss auch erstmal gefüllt werden, und per Hand müsste dort anschließend viel nachgebessert werden. Daher habe ich mich dann doch für diese Variante entschieden. Was meint ihr dazu? Ideen? Habe ich was vergessen? :)

Gruß
Marc
 
Zurück