Ja, so könnte die Überschrift lauten, wenn man für einen Perl-Blog auf PHP ausweichen muß...
Aber ganz so schlimm ist es ja auch nicht!
Ich habe heute endlich mal 'ne eigene Suchmaschine in diesen Blog eingebaut, und da mir die Probleme mit der Parameterübergabe und shtml-Seiten wohl bekannt waren, bin ich diesmal gleich auf php umgestiegen.
Obwohl die Suchmaschine natürlich in Perl gescripted ist, wird der Aufruf der Suchmaschine in PHP gestarted. Übrigens mit einem include(), für alle die, die's interessiert.
Wie dem auch sei: Man kann sich ja auch mal bei der "Konkurrenz" bedienen, wenn es sinnvoll ist.
Ich hoffe, die Suchfunktion tut ihre Arbeit, so weit ich getested habe, funktionierte alles... Bei Problemen am Besten 'nen Kommentar posten...
Durchsucht werden übrigens "nur" die Blog-Beiträge, nicht die Kommentare oder sowas...
So nebenbei nutze ich als Datenspeicher wieder mein Cache-Modul, das auch hier prima Arbeit leistet.
Nachtrag
Aufgrund der Anfrage unten in den Kommentaren, hier eine kleine Anleitung, wie ich mein Suchscript gestaltet habe:
Also der Sinn einer Suche ist ja, die Wörter, die gesucht werden, den Seiten zuzuweisen, die diese Wörter enthalten.
Deswegen muß man also alle Seiten in die einzelnen Wörter zerlegen. Wie das so ungefähr geht, habe ich hier beschrieben.
Diese einzelnen Wörter muß man dann abspeichern, zusammen mit der entsprechenden Seite.
Das könnte in etwa so aussehen:
wo
1,2,56,34,33
wie
22,44,53
usw.
Jedes Wort bekommt also so als Rattenschwanz all die Seiten, in denen es vorkommt.
Die Wörter sollte man übrigens erst in Kleinschreibung wandeln, bevor man sie verarbeitet. Das spart Festplattenplatz, da Wörter wie Das, das oder DAS sowieso immer das gleiche bedeuten.
Möglich wäre übrigens auch eine Gewichtung des Wortes, das es auf der Seite hat. So ist ein Wort in der Überschrift z.B. wichtiger, als wenn es nur einmal in einer 100KB-Datei liegt.
Jetzt hat man also all die Wörter, sinnig ist es vielleicht auch, den Seitentitel zwischenzuspeichern. Dies spart möglicherweise etwas Zeit bei der Ausgabe der Ergebnisse. In meinem Fall ziehe ich die Überschriften allerdings aus der Datenbank, wo sie sowieso schon herumlagern und schnell abzurufen sind.
Nun zur Suche
Der User gibt also ein Wort ein, z.B. Datei.
Das Script such nun nach dem Eintrag 'Datei' und findet den Rattenschwanz mit den Seiten, auf denen 'Datei' steht.
Diese Seiten werden nun ausgegeben, mit Titel.
Sollte man eine Gewichtung bzw. ein Ranking verwenden, werden die Ergebnisse vorher sortiert.
Im großen un Ganzen war's das schon, den Quelltext will ich nun aber nicht veröffentlichen...
Die Suche nach den ähnlichen Worten ist genauso simpel
Man nehme alle vorhandenen Worte und stelle einen "Pool" von falsch geschriebenen Worten her, also z.B.
Aus datei wird (ein Buchstabe vergessen)
atei
dtei
daei
dati
date
Aus datei wird (ein Buchstabe vertauscht)
adtei
dtaei
daeti
datie
usw.
Falls aus der Suche mit den Originalworten keine Treffer hervorgingen, werden nun die Falsch-Worte mit den User-Eingaben verglichen. Bei Treffern gibt man die freundliche Frage aus, ob der User vielleicht das entsprechende, real existierende Wort meinte.
Also alles keine Zauberei...
Kommentare zum Beitrag "Schande über mich - Ich habe PHP benutzt"
Kommentar von MaxistXXL
Du scheinst maechtig stolz zu sein darauf :-D.
Was speicherst du jetzt eigentlich alles damit?
Gibt es etwas, dass du nicht cachest?
Kommentar von Admin
Naja, was heißt mächtig stolz...
Ich würde eher sagen, ich bin froh, daß ich nun endlich 'nen "universellen Datenspeicher" habe, den ich für alle möglichen Scripte verwenden kann.
Denn man muß die Sache ja mal so sehen:
Schalte ich via nopurge() und exclusive() den automatischen Verfall der Daten ab, ist das Modul immer noch schnell genug für solche Geschichten (ich meine damit jetzt die Indexerstellung), und das schöne ist eben, es läuft überall, auf jedem System, auch notfalls von USB-Stick...
Allerdings muß ich sagen, daß ich bei einer "großen" Suchmaschine für viele Seiten (ich hab ja grad mal 200) diesen Weg nicht genommen hätte, da die Performance dann zu gering wäre... Hier wäre dann eine Datenbank die bessere Lösung.
Aber mein Cache erlaubt eben ein relativ "simples" speichern von Daten, bei dem man sich auch unter Multi-User-Umgebungen keinen Kopf machen muß.
Kommentar von Ulli
ich würde genre mehr über die Suchmaschine lesen. Wie hast du die realisiert?
Kommentar von Admin
Kleine Anleitung siehe im Nachtrag auf dieser Seite...
Kommentar von Renée Bäcker
Zu dem wie die Suchmaschine realisiert ist: Wenn Du MySQL verwendest, könntest Du auch "MATCH (Suchwörter) AGAINST (Spalten)" machen. Das verwende ich auf http://perl-nachrichten.de und bin bisher damit sehr gut gefahren. Allerdings habe ich dort noch keine Phonetische und/oder Rechtschreibähnlichkeit mit eingebaut.