| | | | |
| |||||||
| Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| Erfahrener Benutzer Registriert seit: 22.04.2005
Beiträge: 392
![]() | Hallo zusammen, ich möchte eine AJAX-basierte Suchfunktion für eine statische HTML-Seite entwerfen. Durch relativ hohes Besucheraufkommen (20000 Seitenaufrufe pro Tag) habe ich ein statisches HTML-Konstrukt statt einer dynamischen Webanwendung. Auf dem Server ist aber PHP vorinstalliert und die AJAX-Komponente soll auf ein PHP-Script als eine Art Webservice zugreifen. Ausgangsbasis für meine "Idee" war der Artikel Volltextsuche - php bar Die ganze Anwendung soll grob später aus folgenden Komponenten bestehen: 1.) Crawler - Läuft alle Seiten einer bestimmten Domain ab und "zieht" den HTML-Content 2.) Indexer - Wertet den HTML-Content aus, indexiert ihn und speichert die Ergebnisse in einer Microsoft SQL Server Datenbank (Ähnlich dem Artikel auf PHP Bar) 3.) Web-Service Komponente in PHP - Bereitet die Datenbankinformationen auf und stellt sie als XML / CSV / etc.... für das AJAX-Script bereit (Bewertung, Reihenfolge der Ergebnisse hier berechnen?) 4.) AJAX-Komponente - Übernimmt die Darstellung der Suchergebnisse Den Crawler / Indexer wollte ich in einem Stück über eine Java-Software realisieren, als Basis soll dabei (wahrscheinlich) Crawler4j verwendet werden, falls niemand einen besseren Vorschlag hat. Ich persönlich würde darüber hinaus gerne Suchalgorithmen von gängigen Suchmaschinen analysieren und schauen, ob ich daraus noch Informationen ziehen kann, die für meine Einzel-Seitensuche von Belang sind. Dabei geht es um die Analyse von Suchanfragen, Bewertung von Ergebnissen und die Vorgehensweise beim Indexieren und vor allem, in welcher Komponente diese Vorgänge stattfinden. Ein Beispiel macht sicher klar, was mich interessiert: Google scheint die Seiten und deren Inhalt schon im Vorfeld zu "bewerten", so das beim späteren Durchsuchen die Reihenfolge der Ergebnisse bereits feststeht. Der Kernpunkt wäre hier wahrscheinlich die Indexierung und die Aufnahme der Begriffe / Wortkombinationen. Meine hauptsächlichen Fragen lauten nun: Ist die Vorgehensweise im Artikel auf phpbar "professionell" oder gibt es da professionellere Ansätze? Hast jemand zu dem Thema Literaturempfehlungen für mich? Kann man das Vorgehen einer Suchmaschine wie Google (in dem Fall sicher ein Betriebsgeheimnis, aber ich meine ähnlich "ausgereifte" Suchmechanismen) irgendwo nachvollziehen und/oder nachbauen (inkl. Bewertungsmechanismen, Berücksichtigung von h1-h7, title etc.)? Ich würde gerne diesbezüglich ein paar weitere Gedanken austauschen und Tipps wären ganz toll. Vielen Dank Andreas |
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Erfahrener Benutzer Registriert seit: 22.04.2005
Beiträge: 392
![]() | Hallo, ja das mit den Tools ist so eine Sache. Grundsätzlich ist klar, es gibt sicher performante Lösungen, die sehr sinnvoll eingesetzt werden können. Mir geht es aber darum, den Vorgang eines "Suchmechanismus" genau zu verstehen bzw. verschiedene Möglichkeiten zu erforschen und optimal zu nutzen. Nicht darum irgend ein "Tool" zu installieren und zu schaun, ob es meinen Anforderungen entspricht. ABER: Die Dokumentation der genannten Tools und der Quellcode helfen mir vielleicht schonmal weiter. Natürlich ist die Analyse davon sehr mühselig und ich wäre für weitere Beiträge von Leuten, die sich mit der Thematik einer "eigenen" Suchmaschine bereits auseinander gesetzt haben, sehr dankbar. Ein Stand der Technik wäre ebenfalls hilfreich. Was gibt es für neue Verfahren, wo werden sie eingesetzt, etc... Als Hinweis: Suchmaschinen Doktor bietet bereits einige dieser Informationen |
| | |
| | |
| Moderator und Wett-König | Hallo Andreas, wie per PN besprochen, möchte ich dir einige Hinweise zur Architektur einer Suche geben. 1. Suche: Such-Algorithmen sind per so schon mal nicht unkomplex, mischt man diese noch mit schlauen Bewertungs-Algorithmen und Boost-Faktoren wie bei click-based-ranking o..ä. wird es schnell sehr philosophisch. Hier würde ich dir für den Anfang eine einfache Vorgehensweise empfehlen, ausbauen kann man das immer noch. 2. Indizierung: In diesem Bereich gibt es mehrere Ansätze - vor allem aber die Entscheidung zu einer Technologie für das Backend. Im PHP-Bereich kannst du (möchtest du auf Lucene setzen) Zend_Lucene nutzen. Ist grundsätzlich binär-kompatibel zur Java-Version, hat jedoch hinsichtlich der Indizierung massive Performance-Probleme (Stand vor 8 Monaten). Hier könnte man jedoch über eine Kombination nachdenken: Indizierung per Java, auslesen per PHP. Sofern man aber schon JAVA einsetzt, bietet sich besser eine Webservice oder - als leichtere Alternative - XML over HTTP an. Für direkte Verarbeitung in JavaScript-Anwendungen sollte JSON zum Einsatz kommen, dann ist keine Konvertierung mehr notwendig. Alternativ zu Lucene im PHP-Bereich bietet sich tatsächlich die Vorgehensweise von phpbar.de an. Das ist ein Ansatz der sich als "Schreiben komplex, Lesen verdammt schnell" zusammenfassen lässt. Ich habe diesen beispielsweise auf der APF-Seite im Einsatz und bin sehr zufrieden. Die Indizierung ist zwar etwas aufwendiger, aber nicht so komplex, dass man das Konstrukt nicht einfach aufsetzen könnte (Beispiel findest du im APF-SVN). Im JAVA-Bereich bieten sich die Tools an, die bereits genannt wurden, Lucene in Kombination mit diversen Plugins und AddOns bieten dir eine Breite Basis für die Dokument-basierte Indizierung. Hier sollte für eine PHP-Applikation eine - wie oben genannte - Schnittstelle existieren, die Suchanfragen formulieren lässt und Ergebnisse im gewünschten Format ausliefert. Insgesamt bleibt jedoch zu überlegen, welche Zusammenhänge (Referenzen unter den Dokumenten, ...) und Attribute (Boost-Faktoren, Click- und Tracking-Werte, Relevanzen, ...) du zu Dokumenten speichern möchtest. Das bestimmt IMHO maßgeblich die Indizierung. 3. Auslieferung: Die Auslieferung zu bewerten ist maßgeblich an der verwendeten Technologie gebunden. Im JAVA-Bereich gibt es rund um Lucene einige nette JSF-Controls, die Such-Ergebnis-Seiten richtig einfach gestalten lassen. Im PHP-Bereich gibt es sicher auch einige Tools, die man schon fertig einsetzen kann (vielleicht jQuery-Plugins?). Hier ist jedoch die Performance nicht zu vernachlässigen. Wenn du 20000 Besucher erwartest, dann sind hier vielleicht 1.000 Such-Anfragen (5%) dabei - sofern du diese prominent platzierst. In diesem Bereich sollten Hardware-Auslegung des Such-Backends keine Rolle spielen, das lässt sich selbst mit einer Datenbank-basierten Suche relativ entspannt abfackeln. Kritisch wird das erst im Bereich 500.000 - 1.000.000 Suchen pro Tag. Hier kann man sich tatsächlich überlegen, ob ein File-basierter Index nicht schneller ist als eine Datenbank (was in der Regel mit "ja" zu beantworten ist). 4. Literatur: Professionell ist IMHO alles, was seiner Aufgabe in eleganter Art und Weise gerecht wird und zudem noch Puffer nach oben lässt (Skalierungs-Konzepte, ...). Den Aufbau von Google kannst du im Groben unter The Anatomy of a Search Engine nachlesen, unter Architektur von Suchmaschinen – Teil 1 | News Navigators gebloggt findest du weitere Stellen zum nachlesen. Für die von dir genannten Anforderungen ist so etwas jedoch IMHO noch nicht notwendig.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] Countdownschleife auf webseite anzeigen lassen | BlackKnight | PHP Tipps 2010 | 6 | 26.01.2010 03:32 |
| Suchmaschine mittels Get XSS | Datenbock | PHP Tipps 2009 | 3 | 31.08.2009 15:05 |
| Zero: Die neue Suchmaschine sucht weitere Helfer | WestsidersX | Beitragsarchiv | 47 | 08.07.2009 18:55 |
| Funktion in Code für Suchmaschine | german.Playboy | HTML, Usability und Barrierefreiheit | 17 | 03.12.2008 10:30 |
| Komplette Webseite bleibt "stehen" | crazyhead | PHP-Fortgeschrittene | 4 | 01.09.2007 17:58 |
| Webseite auslesen | Katrin | PHP Tipps 2006 | 6 | 21.04.2006 20:43 |
| FireFox Suchmaschine entfernen | Off-Topic Diskussionen | 4 | 08.12.2005 15:49 | |
| rss/xml Feeds auf Webseite einbinden | PHP Tipps 2005-2 | 2 | 29.10.2005 13:44 | |
| [Erledigt] Frage zu Webseite | PHP Tipps 2005-2 | 1 | 26.10.2005 21:18 | |
| Mehrsprachige Webseite | PHP Tipps 2005-2 | 4 | 08.07.2005 08:19 | |
| [Erledigt] Automatisches neu laden der ganzen Webseite | HTML, Usability und Barrierefreiheit | 7 | 26.01.2005 08:38 | |
| benötige suchmaschine | Beitragsarchiv | 3 | 26.10.2004 00:35 | |