Moin!
Zunächst mal mein Dank!
Ums zusammenzufassen:
- Funktioniert die Suche überhaupt? Oder gibt sie einfach alle Ergebnisse aus?
Doch. Das sie funktioniert soweit. Sie gibt tatsächlich alles aus, sobald ein Suchbegriff übereinstimmt. Allerdings gewichtet.
Ich habe mal die Anzeige der Wichtungspunkte eingeschaltet. Darauf gehe ich weiter unten ein.
Wenn Du ein z.B. "PHP März Januar Februar Kassel" suchst, oder "Ich suche ein PHP- Seminar in Kassel im Februar, Januar oder März." eingibst bekommst Du folgende Ausgabe:
Seminar Ort Start Ende T Preis Punkte
PHP Grundlagen Kassel 17.01.2005 19.01.2005 3 850,00 9
PHP Grundlagen Gießen 24.01.2005 26.01.2005 3 850,00 8
PHP Grundlagen Frankfurt am Main 17.01.2005 19.01.2005 3 1040,00 8
PHP Grundlagen Kassel 18.10.2004 20.10.2004 3 850,00 8
PHP Grundlagen Gießen 25.10.2004 27.10.2004 3 850,00 7
PHP Grundlagen Frankfurt am Main 18.10.2004 20.10.2004 3 1040,00 7
...
Was ist oben? PHP in Kassel, Termin im Januar. Dann Termine, zwar nicht in Kassel, aber PHP im Januar.
Dann PHP in Kassel, danach PHP...
Versuche auch mal: "Excel" "Excel Grundlagen" "Excel Grundlagen 300 Euro Kassel" "Excel Grundlagen Kassel Januar 300 EUR"
Darunter die Seminare in absteigender Reihenfolge, die immer weniger Bedingungen erfüllen. Deswegen habe ich auch vorläufig die Finger von einer benutzerseitigen Sortierung gelassen.
Dass die Zeilen darunter "Schrott" anzeigen liegt in der Natur der Sache. Wenn ich gewichtet ausgeben will, dann muss ich zunächst eine gewisse Unschärfe in Kauf zu nehmen. Das hat z.T. auch "Marketing" Gründe. Unten steht was zum Feintuning.
Zu den Tagen: Das funktioniert natürlich nur, wenn z.B. ein PHP-Seminar von einem Anbieter mit 3, von einem anderen mit 2 Tagen angeboten werden würde. Dann wäre das (ich setze voraus, es wurde ein zweitägiges Seminar gesucht) das zweitägige vor dem 3tägigem gelistet.
Wie würdest Du so eine Suche bauen?
Meine funktioniert so, dass sie alle Sonderzeichen killt, alle überflüssigen Leerzeichen ersetzt.
Dann werden die gefundenen "Wörter" untersucht: alles mit weniger als vier Buchstaben wird rausgeworfen (ausser, es steht in einer Ausnahmeliste oder es ist Zahl), Es wird auf deutsche Monatsnamen untersucht etc.
Danach erfolgen die Abfragen in temporäre Tabelle. Zunächst nur, ob irgendeiner der Begriffe gefunden wurde. Dann wird die temporäre Tabelle nochmals gegen die Suchbegriffe gecheckt und "Wertungspunkte" vergeben. Zuletzt wird entsprechend dieser Punkte sortiert ausgegeben. Das bewirkt, dass das Seminar, welches wahrscheinlich dem Kundenwunsch am nächsten kommt, oben steht. Die anderen gewichtet unten drunter.
Das einzige, woran ich hier drehen könnte, wären Fragen wie: ab welcher "Punktezahl" wird ausgegeben", Wieviele Ergebnisse maximal... etc. Um dieses Feintuning zu machen muss ich ein wenig abwarten, die über 1000 Seminare in der Datenbank sind da definitiv immer noch zu wenig. Aber ich werde die Zahl wohl schon jetzt höher setzen können.
Vermutlich brauche ich hier einen Algorithmus, für die Mindestanzahl der Punkte. Um den zu erstellen bräuchte ich aber eine initiale Idee. Eine "scharfe" Suche a la "select dies from das where jenes='genaudas'" bringt aber nichts.
Es bleibt:
- Anzahl der "Suchwörter" - zu nachteilig, wenn davon zu viele zu keinen Treffern führen
- Anzahl der Übereinstimmungen in der zunächst ungewichteten Tabelle
- Vielleicht die durchschnittliche Punkteanzahl in der gewichteten Tabelle- das wäre wohl eine Idee.
Testet mal schön weiter und macht Vorschläge :)
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch für seriöse Agenturen.