# [Hilfe] Eigene Suchmaschine?



## Pascal3366 (16. Dezember 2014)

Hallo liebe PCGHx Community,

Wie ihr schon im Titel sehen könnt würde ich gerne eine eigene eigenständige Suchmaschine programmieren (wie z.B Google, Yahoo, Bing...etc.)
Leider hat mir bisher kein Tutorial weitergeholfen und ich weiß nicht genau wie ich anfangen soll 
Vielleicht kann mir hier einer weiterhelfen? ....

Danke schonmal im Vorraus 

Die Momentane URL lautet : SearchDat Search Engine

-----------------------------------------
MfG Pascal3366


----------



## Noirsoleil (16. Dezember 2014)

Wozu um alles in der Welt brauchst du eine eigene Suchmaschine? Und vlt. solltest du dich erst mal mit dem Thema Suchmaischienen beschäftigen, das ist nämlich nicht leicht. Du könntest höchstens eine Maschine schreiben welche auf Basis von Google oder Yahoo arbeitet und deren Ergebnisse weiter filtert aber mehr geht nicht!


----------



## Bunny_Joe (16. Dezember 2014)

Klar geht mehr! Er könnte Crawler programmieren und die Links nach den eingegebenen Suchwörtern filtern.


----------



## bingo88 (16. Dezember 2014)

Da hast du dir aber was vorgenommen 
Das Grundprinzip ist eigentlich relativ simpel: Du fängst im Prinzip mit einem Crawler an. Der analysiert die Webseiten, folgt Links, etc. Die hierbei gesammelten Daten müssen dann irgendwie "verpackt" und gespeichert werden, so dass man sie schnell durchsuchen kann (sehr vereinfacht ausgedrückt). Realistisch betrachtet dürfte es allerdings schwer werden, den etablierten Anbietern die Stirn zu bieten.


----------



## Pascal3366 (16. Dezember 2014)

Ja da hab ich mir wirklch was vorgenommen 
Aber ich brauchte mal wieder was zum programmieren und da dachte ich mir ne eigene suchmaschine wär doch ganz nett und ja ich möchte sie wirklich komplett selber programmieren.
Ich habe bereits eben mal ein Tutorial befolgt doch am Ende hats nicht geklappt


----------



## bingo88 (16. Dezember 2014)

Naja, du brauchst halt zunächst mal den Crawler. Der muss, wenn es sicht auf Webseiten beschränkt, HTML verstehen können. Also zumindest Texte und Links sollte er dann erkennen können. Den Links muss der Crawler dann ebenfalls untersuchen, wobei man dann noch unterscheiden sollte, was das für ein Link ist (Webseite, Datei, ...). Zumindest für diesen Teil, also das Herstellen und Nutzen einer HTTP-Verbindung und die Verarbeitung von HTML, sollte es im Netz für deine Programmiersprache durchaus Tutorials geben.

Das Verarbeiten der gefundenen Informationen, so dass sie durchsuchbar sind (Indizierung), würde ich als den deutlich schwierigeren Teil betrachten. Da muss man sich geeignete Datenstrukturen und Algorithmen überlegen bzw. nachschlagen. Eine gute Vorverarbeitung der Daten kann das Durchsuchen nämlich deutlich beschleunigen und vereinfachen. Für den Anfang tut es da sicherlich eine einfache SQL-Datenbank.


----------



## Pascal3366 (17. Dezember 2014)

Die mysql datenbank hab ich 
Momentan ist das problem:
Ich habe mal seiten in die datenbank eingetragen, doch gebe ich in die suche etwas ein, werden alle seiten angezeigt welche in der datenbank stehen und nicht das nachdem man gesucht hat


----------



## bingo88 (17. Dezember 2014)

Wie sieht denn deine Query aus bzw. wie suchst du denn?


----------



## Pascal3366 (17. Dezember 2014)

das hier ist meine "search.php" datei, wo der haupt code für die suche drin steht :

	<!-- Latest compiled and minified CSS -->
	<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
	<!-- Optional: Include the jQuery library -->
	<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
	<!-- Optional: Incorporate the Bootstrap JavaScript plugins -->
	<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
	<!-- Optional Theme -->
	<link rel="stylesheet" href="css/style.css">

<?php
mysql_connect("localhost", "u241211141_index", "Passwort");
mysql_select_db("u241211141_index");

$sql = mysql_query("SELECT * FROM searchengine WHERE pagecontent LIKE '%$_GET[term]%' LIMIT 0,$_GET[results]");

while($ser = mysql_fetch_array($sql)) { echo "<h2><a href='$ser[pageurl]'>$ser[pageurl]</a></h2>"; }

?>
<hr>
<a href="./index2.php">Go Back</a>


----------



## bingo88 (17. Dezember 2014)

Die Query hätte gereicht, Username und PW deines MySQL Servers müssen wir hier nicht unbedingt sehen können 

Grundsätzlich: Deine Query ist schon mal nicht SQL Injection sicher, das solltest du fixen sofern die Seite öffentlich verfügbar ist.

Das mit dem LIKE ist zwar nicht gerade effizient, da der ja jedes Feld durchsuchen muss, sollte aber eigentlich funktionieren. Hast du dir mal angesehen, was im pagecontent Feld enthalten ist? Also ob der gesuchte Term darin vorkommt?

Ich bin da jetzt wahrlich kein Spezialist auf dem Gebiet, aber hier mal mein Ansatz zur SuFu wie ich es versuchen würde: Nach dem Einlesen der Seite läuft ein Tokenizer, der den Content in einzelne Wörter aufteilt (das klingt einfacher als es ist!). Die einzelnen Wörter könnten anschließen gefiltert werden, beispielsweise interessieren einen ja "Füllwörter" wie "und", "der", "die", "das", etc. in der Regel weniger. Eine Lemmatisierung bzw. ein Stemming ist ebenfalls hilfreich, da dass die Worte auf ihre Grundform zurückführt. Das ermöglicht dir dann beispielsweise im Text "sehen" über "sah" und "sieht" zu finden. Nach der Filterung bleiben dann nur noch die "interessanten" Worte übrig, die man dann speichern kann (mit einem Verweis auf die Seite, wo sie vorkommen). So hätte man die Seite dann indexiert.


----------



## Pascal3366 (17. Dezember 2014)

Ja das klingt in der Tat kompleziert ist aber hoffentlich schaffbar


----------



## ofhouse (17. Dezember 2014)

Also das einzige, was du bauen kannst, ist eine Meta-Suchmaschine, für alles andere wirst du mindestens ein abgeschlossenes Informatik-Studium benötigen 
Du brauchst selbst für eine Meta-Suchmaschine schon einiges an Wissen (aus der theoretischen Informatik), weil eine Suchmaschine vor allem mit Mengen, Teilmengen und Mengenbeziehungen arbeitet.

Die Theorie hinter einer Suchmaschine ist im Prinzip reine Mathematik und hat mit Informatik nur Bedingt was zu tun.
Wenn du auf trockene Mathematik und Mengenlehre stehst, hast du sicherlich das richtige Thema gewählt, um dich dran abzuarbeiten, wenn du aber eher Richtung praktische Informatik gehen willst, solltest du dir ein anderes Thema aussuchen.


----------



## Pascal3366 (17. Dezember 2014)

Hehe hab leider kein Informatik Studium hinter mir 
und mathe ist gar nicht mein Ding. 
Wie funktioniert denn so eine meta Suchmaschine?


----------



## ofhouse (17. Dezember 2014)

Ich will dir ja den Spaß an deiner Idee nicht nehmen, aber dann solltest du vllt ein anderes Projekt wählen.
Wenn man sich schon die Mühe macht und ein Projekt in Angriff nimmt, sollte einem der Inhalt auch liegen, weil die Tiefpunkte in so einem Projekt kommen schon von allein.
Ich will damit sagen, wenn du dir ein Thema suchst, was vom Inhalt mehr deine Fähigkeiten entspricht, wirst du mehr Spaß am programmieren bekommen, als wenn du ein Thema hast, das dir nur für 1 - 2 Wochen Spaß macht und danach schon deinen Horizont übersteigt.

Eine Meta-Suchmaschine wertet stur die Inhalte einer Webseite nach Schlüsselworten aus (Meta-Daten) und speichert diese.
Wenn du jetzt Suchworte eingibst, sorgt ein match-Algorithmus dafür, dass das Ergebnis zurückgeliefert wird, was am besten zu deiner Anfrage passt.
Das ist die einfachste Form der Suchmaschine, aber der match-Algorithmus ist je nach Anforderung auch nicht einfach zu schreiben.

Für Google sind meta-Daten zwar auch wichtig, aber hier kommen noch Kantengewichte dazu, d.h. die Suchergebnisse bei denen sind in einer Art Graph gespeichert.
Die Suchergebnisse werden dadurch signifikant besser, weil man zusätzliche Einflussfaktoren (z.B. Standort, Zeit, etc.) mit einbeziehen kann.

Deswegen hab ich das mit dem abgeschlossenen Studium geschrieben, weil es für eine Suchmaschine wirklich entscheidend ist, *wie* du deine Daten speicherst.
Und dafür sollte man sich mal mit einigen Konzepten (Graphen, Bäumen etc.) tiefergehend beschäftigt haben, weil das die Grundlagen einer Suchmaschine sind, das programmieren ist da wirklich Nebensache.


----------



## Pascal3366 (17. Dezember 2014)

Gibt es vielleicht irgendeine möglichkeit den Google crawler oder dessen Datenbank zu nutzen?  

Edit : oder was haltet ihr von openwebspider vielleicht waere das ja ein sinnvolles framework  

OpenWebSpider


----------



## Ahab (22. Dezember 2014)

Du wirst keine Suchmaschine programmieren. Dazu fehlen dir augenscheinlich absolut essentielle Kenntnisse, die man nicht einfach mit einem Tutorial abdeckt. Oder was sind gewichtete Kanten? Ein geschlossener Weg? Wie passen Suchmaschinen und Graphentheorie überhaupt zusammen? 

Aber da bist du nicht der erste, alle Jahre wieder kommt jemand wie du und will zum Beispiel ein eigenes Betriebssystem programmieren. Allein. Mit ein paar losen Kenntnissen in HTML. Oder ein ABSOLUT REVOLUTIONÄRES SPIEL! Das quasi wie GTA, Age of Empires und Call of Duty in einem ist, nur besser und geiler. "Ich kann aber bis jetzt nur ein bisschen Blender."

Back kleinere Brötchen! Um Programmieren zu lernen muss man wirklich nicht studiert haben, aber es motiviert NICHT und schon gar nicht langfristig, sich zum Einstieg (!) solche völlig utopischen Ziele zu setzen.


----------



## XPrototypeX (23. Dezember 2014)

Ob man ihn jetzt so runterziehen muss glaube ich kaum. Eine gut funktionierende Suchmaschine wird er nicht schreiben aber ich glaube das weiß er selbst auch. Einen einfachen Crawler zu schreiben ist imho nicht besonders schwer. Es kommt aber auch sehr stark darauf an ob man alles selbst schreiben will. Ich hab z.B mal einen Crawler in Java geschrieben mit ein paar fertige APIs als hilfe. Da war das auch an einem Wochenende getan (wobei ich da eher das Augenmerk auf Clustering gesetzt habe, anstatt den eigentlichen Crawler). 

Schaffbar ist das auf jedenfall. 

Ich denke bei einer einfachen Suchmaschine ist der Crawler das Wichtigste. Du musst Seiten nach Links durchsuchen außerdem schaust du schonmal wie oft ein bestimmtest Wort vorkommt um nachher irgendeine Datenstruktur zu füttern. Die gefundenen Links gibst du in eine andere Struktur (eine Queue würde sich dafür eignen) prüfst aber vorher noch ob du den gefundenen Links nicht vielleicht doch schon geparst hast und lässt deinen Parser auch dort drüber laufen. 

Jetzt hast du schonmal verschiedene Seiten geparst und kannst ein einfaches Interface bauen, das überprüft welche deiner eingegebenen Worte am ehsten zu welchem Link passt und diesen ausgeben. 

Ich denke das ist erstmal ein guter Start und sollte viel zum Lernen beitragen.


----------



## hann96 (31. Dezember 2014)

Pascal3366 schrieb:


> mysql_connect("localhost", "u241211141_index", "Passwort");
> mysql_select_db("u241211141_index");



PHP: mysql_select_db - Manual
PHP: mysql_connect - Manual

Wahrscheinlich bald nicht mehr aktuell.


----------



## Pascal3366 (5. Februar 2015)

[PUSH]
So Suchmaschine läuft nun auf SearchDat Search Engine

Viel Spass 

Verbesserungsvorschläge...? gerne.

Edit: 
Was Jetzt aufjedenfall noch fehlt ist ein crawler, denn ich muss alle Seiten manuell in die Datenbank einfügen


----------



## Ap0ll0XT (6. Februar 2015)

Hehe LOL 



			Dieser Inhalt steht nur eingeloggten Mitgliedern zur Verfügung.


----------



## hann96 (6. Februar 2015)

Ap0ll0XT schrieb:


> Hehe LOL
> 
> 
> 
> Dieser Inhalt steht nur eingeloggten Mitgliedern zur Verfügung.


Wtf


----------



## Pascal3366 (6. Februar 2015)

Hä????? Das ist aber eigenartig.... Einfach auf ignorieren klicken oder whitelist hinzufügen 
Kaspersky ist irgendwie komisch


----------



## hann96 (6. Februar 2015)

Pascal3366 schrieb:


> Kaspersky ist irgendwie komisch [emoji14]


Das sagen sie alle


----------



## Pascal3366 (6. Februar 2015)

Es kann auch sein dass ihr mal den Cache leeren müsst wenn ich etwas ändere im chrome einfach shift+f5

Ne also auf der Seite ist wirklich kein Wurm ansonsten muss ich da mal was in den Code reinbauen dass der Scanner die Seite nicht mehr als malware erkennt


----------



## hann96 (6. Februar 2015)

Was ich gut finde:
- Responsive 
- Zeigt die Größe der Website an
- Zeigt die Treffer Wahrscheinlichkeit an

Nicht so gut:
- Design sieht noch nicht fertig aus 
- guck es dir selbst an SearchDat Search Engine
Edit: - nicht so gut wie Google


----------



## Ap0ll0XT (6. Februar 2015)

Pascal3366 schrieb:


> Hä????? Das ist aber eigenartig.... Einfach auf ignorieren klicken oder whitelist hinzufügen
> Kaspersky ist irgendwie komisch


Sorry das ich das so sage. Aber Kaspersky erkennt die Seite als Phishing-Versuch an. Und bei dem Markup-Source ist das auch kein Wunder  

Da braucht jemand HTML-Nachhilfe 



			Dieser Inhalt steht nur eingeloggten Mitgliedern zur Verfügung.


----------



## Pascal3366 (6. Februar 2015)

So hab Ich den Quellcode nicht geschrieben, der wird automatisch so generiert wenn du auf search klickst und ich wüsste nicht was ich ändern sollte

Edit hinter dem contact Form steckt noch nichts hinter das ist noch in der mache


----------



## Ap0ll0XT (6. Februar 2015)

Pascal3366 schrieb:


> So hab Ich den Quellcode nicht geschrieben, der wird automatisch so generiert wenn du auf search klickst und ich wüsste nicht was ich ändern sollte
> 
> Edit hinter dem contact Form steckt noch nichts hinter das ist noch in der mache


Das du den PHP-Code geschrieben hast, wird der Code auch so ausgeschmissen, wie du ihn über PHP erzeugen lässt


----------



## hann96 (6. Februar 2015)

Ich glaube da muss jemand nicht nur HTML-, sondern auch PHP- Nachhilfe bekommen


----------



## ofhouse (6. Februar 2015)

Ich denke, dass Kaspersky anschlägt, liegt eher an der Wahl der Domain .tk
Da die Teile kostenlos sind und es keine Inhaberdaten gibt, sind die Adressen für Spammer & Phisher natürlich sehr beliebt.

Also wenn du wirklich Leute auf deine Seite holen willst, investier die 6€/Jahr in einen vernünfigen Domain-Namen, mit .tk-Domain (genau so wie de.vu etc.)  nimmt dich keiner für voll.


----------



## Ap0ll0XT (6. Februar 2015)

Als Demo reicht die tk-Domain. Ich kenne viele Seiten, die diese tk-Domains nutzen und da gab es nie ein false positive. Außerdem verweist Kaspersky auf die Heuristik. Daher müsste es am Code liegen.


----------



## Pascal3366 (6. Februar 2015)

Eigenartig...


----------



## Ap0ll0XT (7. Februar 2015)

Pascal3366 schrieb:


> Eigenartig...


Der HTML-Output ist nicht valide und macht auch so kein Sinn. Es werden im Grunde 2 HTML-Dokumente (DOM's) in dem Output definiert. Der Kopfbereich des ersten Dokuments enthält keine Informationen und das einbinden der Script-Dateien geschieht doppelt und außerhalb des Kopf-Kontext. Ich denke mal deswegen findet Kaspersky das ganze merkwürdig.

Kleiner Tipp:
Egal wie viele PHP-Dateien per Include/Require eingebunden werden. PHP gibt alles an HTML-Output an den Browser zurück, was du per echo renderst. Achte deshalb darauf, das du auf Unterseiten niemals ein vollständiges DOM renderst, sondern nur den Code, der zwischen <body> und </body> soll. Dann passiert sowas auch eigentlich nicht


----------



## Jimini (7. Februar 2015)

Bitte nicht das Berücksichtigen der robots.txt vergessen, falls die Ergebnisse auch anderen zur Verfügung gestellt werden sollen 

MfG Jimini


----------



## Pascal3366 (12. Februar 2015)

Ja erstmal brauche ich einen crawler


----------

