by:

Wo sind denn nur die verflixten Schlüssel hin verschwunden? Und wer zur Hölle versteckt ständig die Fernbedienung?!?
Nun ja, wer kennt sie nicht die verzweifelte Suche nach allen möglichen Dingen?
Im realen Leben kann ich euch da auch nicht helfen (obwohl die Marktchancen für Schlüsselsuchroboter wohl gar nicht schlecht wären),
aber im Überlebenskampf in den unendlichen Weiten des www gibt es zum Glück eine Möglichkeit...

Anmerkung:
Wie man eMailadressen, Kreditkarten oder andere personenbezogene Daten aus dem Netz fischt werde ich an dieser Stelle nicht beantworten.
Wer wissen will wie man ansatzweise eine eigene Suchmaschine schreibt, wird hier geholfen,
etwas Programmiererfahrung in PHP wäre dabei von Vorteil.

Überblick:
Ich habe mich schon etwas länger mit der Problematik befasst eine Suchmaschine zu erstellen,
weniger aus der Ambition heraus Google Konkurrenz zu machen, als mehr aus Spass an der Technik.
Zuerst einmal werde ich in diesem Artikel eine kleine Übersicht geben und die Unterschiede zwischen
einem Crawler und Indexer erklären.
In weiterer Folge werden wir versuchen Ordnung ins Chaos zu bringen und eine kleine Suchmaschine programmieren.
Es wird am Ende auch auf das Thema SEO eingegangen, allerdings weniger aus der klassischen Perspektive der
selbsternannten Marketingexperten, als mehr aus Sicht des Suchmaschinenprogrammierers.


Auf dem Markt gibt es derzeit viele Suchmaschinen, allerdings wenige die so populär sind wie Google,
was nicht zuletzt auf deren Rankingfunktion zurückzuführen ist, diese ist dafür verantwortlich
dass ich möglichst relevante Suchergebnisse erhalte.
Wir werden uns also in weiterer Folge mit der Thematik beschäftigen müssen, wie wir möglichst
interessante Ergebnisse zu den Suchanfragen generieren.
Hierbei unterscheide ich generell zwischen zwei Arten, dem usergenerated Ranking (bedeutet der User bestimmt welche Inhalte zu welchem
Thema interessant sind) und dem rein computergestützten Ranking.
Am besten wäre natürlich eine Mischung aus beiden, aber dazu später mehr.

Die erste Frage die sich stellt, wenn man sich mit der Thematik beschäftigt: "Woher bekomme ich die ganzen Daten?".

Das kommt darauf an, was man durchsuchen will, wir werden uns in diesem kleinen Howto primär den Internetdaten widmen.
Also "Woher bekomme ich alle Webseiten?", nun ja, leider ist es bei der Grösse und dem Wachstum des Internets nicht
möglich alle Webseiten in seine Suchmaschine aufzunehmen, auch für Google nicht. (Ja, richtig, entgegegen hartnäckig
kursierender Gerüchte: auch Google weiß nicht alles.)
Daher können wir nur einen kleinen Teil des Internets überhaupt aufnehmen.
Diese Arbeit macht der sogenannte Webcrawler, er besucht Webseiten, folgt den Links (bis zu einer gewissen Tiefe) und
speichert die Daten in einer Datenbank.

Meine ersten Gehversuche habe ich mit einem externen Crawler (larbin und wget) und einem selbst geschriebenen Indexer gemacht.

Der Indexer hat lediglich die Aufgabe gehabt, vereinfacht gesagt die gesammelten Daten in die Datenbank zu schreiben.
In weiterer Folge hat er die Daten sortiert, Schlüsselwörter extrahiert und Datenbestände aktuell gehalten.

Bei grösseren Mengen (Bsp. 30 GB Daten) kann das schon mal an die Grenzen der Serverressourcen gehen.
Deshalb habe ich die Suchanfragen auf einen zweiten Table abgefragt, wo lediglich url, title, keywords und description
vorhanden sind und nicht die gesamten Rohdaten.

Okay was wissen wir bis jetzt? Wir benötigen einen Webcrawler, der uns die Webseiten runterlädt, und
einen Indexer der die Webseiten in die Datenbank speichert. Soweit sogut.
Damit wir unsere Daten nicht nur horten, sondern auch nutzen können, brauchen wir auch noch ein kleines
Frontend, mit der Möglichkeit eine Suchanfrage zu starten.
In meinem Beispiel wird das Frontend auch die Aufgabe des Webcrawlers übernehmen, das bedeutet man
kann nur einzelnene Seiten dem Index hinzufügen, allerdings ist diese Variante auch kompatibel
mit larbin, wget und anderen Webcrawlern.

Aber dazu mehr in Part 2, jetzt kommt erstmal etwas Code (es gibt auch das gesammelte Packet weiter unten):

Hier mal unsere config.php Datei, wo alle wichtigen Zugangsdaten für die MySQL DB gespeichert sind.

CREATE TABLE `data` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`keyword` varchar(255) NOT NULL,
`desc` varchar(255) NOT NULL,
`url` varchar(255) NOT NULL,
`pr` int(11) NOT NULL default 5,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Das ist unsere Tabelle data, wo wir die Metadaten der Webseiten speichern werden.
Dies erledigt folgender Script.

add.php speichert die Metadaten einer Webseite in der Datenbank, wenn der title und description tag
vorhanden ist. Sollte die Url in der Datenbank bereits vorhanden sein, wird der vorhandene Datensatz aktualisiert.

Nun brauchen wir noch einen Script der die Daten durchsucht und im Idealfall auch ein Ergebnis ausspuckt.
(Beachte das dieser Script über ajax aufgerufen wird.)

result.php
schaut in der Datenbank, ob der übergebene Parameter $_POST[search] vorhanden ist und sortiert die Ergebnisse nach dem Feld pr.
In diesem Feld speichern wir das Userranking.

Nun benötigen wir noch eine Seite, die es dem Benutzer erlaubt die Suchanfragen einzugeben:

index.php
ist im wesentlichen dazu da, dem Benutzer ein Eingabefeld zu zeigen, von wo er die Suchanfrage
starten kann. Darüber hinaus übernimmt der Script auch das Uservoteing und somit ist er auch Bestandteil des Rankings.

Zu guter Letzt noch die ajax.js Datei, sie übergibt im Hintergund die eingegebenen Daten aus dem Textfeld der result.php Datei.

Tatatata! Fertig ist unsere Suchmaschine mit der beliebten usergenerierten Sortierung!

Gesamter Script: Downloaden | Demo
Licence GPL 2

In Part 2 werde ich noch näher darauf eingehen, wie man die Daten automatisiert in die Datenbank
schreibt, und wie man eine "Meinten Sie .." Funktion implementiert.
Ausserm werde ich das Thema SEO aus einem eher technischen Gesichtspunkt beleuchten und
versuchen die Suchergebnisse zu optimieren.

Ich hoffe euch hat der kleine Exkurs in die Welt der Suchmaschinen gefallen, wenn ja
freue ich mich immer über ein Kommentar, wenn nein siehe wenn ja. :)


Best Regards

Andreas


Quellen
http://yacy.net/
http://larbin.sourceforge.net/index-eng.html
http://www.gnu.org/software/wget/



Name:
Hi Bailey,

erstmal freut es mich, das dich mein Tutorial interessiert.
Du hast natürlich recht, und irgendwie ist es mir auch Peinlich, das ich
nie die Zeit gefunden haben Part2 zu veröffentlichen.
Wenn ich mal wieder etwas Luft habe, werde ich versuchen, das Thema neu aufzugreifen,
und auch gleich ein paar Verbesserungen am alten vornehmen ;)

lg
Andreas

Name:
Hey,
ich melde mich zwar 5 Jahre zu spät, da die Seite aber noch existiert kann ich ja mal fragen:
wie wäre es mit einem Part 2? :D
Ich finde das Tutorial sehr interessant..

Name:
Super Sache der Style, hat nur leider ein paar Probleme bei Opera. Zwei Dinge sind mit beim Testen sanotpn aufgefallen:Die Beschreibung ffcr die Bilder im Menu unter der Karte ist nach unten verschoben, und die Spalten ffcr die Items nehmen in der Hf6he etwa 5 mal soviel Platz ein, wie die eigentliche Textzeile, dadurch geht die schf6ne dcbersicht total verloren.Auch wenns aufwendig sein dfcrfte ffcr die wenigen Opera-Nutzer hier ffcr Kompatibilite4t zu sorgen, wfcrde ich mich trotzdem drfcber freuen. Vielleicht habt ihr ja Zeit und Lust.

Name:
freut mich das dir der artikel gefallen hat,
ich hab leider wenig zeit das teil weiter zu entwickeln, w?rde heute doch einiges anders machen ...

Name:
Hallo Andreas,

ich finde das sehr interessant und habe eine Anwendung