Hi
Ich will eine Suchmaschiene programmieren die ich für verschieden Webseiten benutzen kann. Daher habe ich die Threads von (hauptsächlich) Michael und Andreas mit großem Interesse verfolgt. Ich hatte damals auch schon eine kleine geschrieben, die aber eher eine Interimslösung darstellen sollte, bis ich die Zeit finde eine besssere zu schreiben. Nun habe ich, zumindest zu Teil, diese Zeit.
Da ich aber bisher in diesen Themengebieten noch icht alzugroße Erfahrungen gewinnenkonnte, dieser Thread.
Technische Mittel zur Umsetztung (eigentlich irellevant, oder?):
-Perl
-Postgre oder Mysql je nach Einsatzort
Damit die Suche auch bei größeren Datenmengen performant bleibt habe ich mir ungefähr eine derartige Struktur vorgestellt:
1: In der Db werden immer nur die einzelnen Worte des zu durchsuchenden Dokumentes eingetragen. Zusätzlich wird ein Ziel angegeben, in dem sich das Dokument befindet.
2: es gibt jeweils eine Tabelle für Wortanfänge mit aa, ab, ac,...zz und eine Tabelle für Sonderzeichen (Ja, ich weiß, dass das viele Tabellen werden)
3: es werden nur Wörter mit einer Mindestlänge von drei Buchstaben in den Suchtabellen gespeichert. Zusätlich werden Wörter wie 'die', 'der', 'und' usw. rausgefiltert. Dabei wird z.B. eine 1 bei der Spalte praefix eigetragen.
4: um eine präfix-Suche zu ermöglichen, wird jedes Wort mit mehr als drei Buchstaben, von vorne gekürzt, dh. in der DB steht dann z.B. Hallo, allo und llo.
5: In der Suchmaschiene steht statt Sonderzeichen wie ä immer ae usw, um die verschiedenen Schreibweisen zu berücksichtigen.
6: Die unvollständigen "präfix"-Einträge werden in einer zusätlichen Tabelle gekenzeichnet, damit man sie später trennen kann.
7: Weitere Spalten enthalten, falls vorhanden und notwendig, zusätliche Informationen wie Datum, kategorie, autor......
8: Um ein ranking zu erhalten wird zuerst nach exakt dem Suchbegriff gesucht, später auch nach solche mit einem Anhängsel (Postfix mittels %) dann auch indem jetzt auch nach Wörtern gesucht wird bei denen eine 1 bei postfix steht, auch nach präfixen.
9: in der WHERE Klausel wird zuerst nach (falls vorhanden) Kategorie, autor, erstellungsdatum usw. gesucht, um die Geschwindigkeit zu erhöhen.
10: Um die Wortnmenge nicht ganz so hoch werden zu lassen werden begriffe wie 'und', 'die', Zahlen generell usw nicht eingetragen.
Meine Fragen:
a: Habt ihr Verbesserungsvorschläge, Kritik, Fragen zur generellen Struktur?
b: Zu 7, oder sollten diese ganzen Informationen in eine zusätzliche Tabelle? Wäre zwar sinvoll, aber machen die zusätzlichen Kosten für die Abfragen nicht den Vorteil zunichte?
c: Zu 10, oder sollten diese Wörter nur mit einem anderem Wort zusammen suchbar sein? Oder wie z.B. bei Google nur mit einem '+' davor?
d: Wie soll ich suchen wenn mehr als ein Suchbegriff eingegeben wird? Soll ich suchen welche das gleich Ziel haben, und diese nach dem zweiten Suchbegriffdurchsuchen? Oder das Ziel des ersten Suchbegriffes über Perl öffnen und mittels Regexen durchsuchen?
e: Macht es Sinn die Reihenfolge der where Klausel nach Länge der der Suchbegriffe zu sortieren? So dass lange, da sie vermutlich seltener vorhanden sind, zuerst gesucht werden?
mfg und vielen, vielen Dank Andres Freund
PS: Ich hoffe es sind nicht alzuviele Fragen....und dass ich nicht das wichtigste vergessen habe.