Suchmaschine selber bauen

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von Der_Jan, 22.07.2005.

  1. Der_Jan

    Der_Jan Thread Starter MacUser Mitglied

    Beiträge:
    606
    Zustimmungen:
    7
    MacUser seit:
    06.01.2004
    Ich träume von einer eigenen Suchmaschine für meine Homepage. Die Inhalte sind bereits vollständig in einer MySQL abgelegt, sollte also irgendwie möglich sein.

    Hat hier jemand mit solchen "Träumen" Erfahrung und kann mir einen Ansatz anbieten, wie eine Suchabfrage in php aussehen kann?

    Danke & Gruß
    Der Jan
     
  2. dms

    dms Gast

    Naja, also um da eine genauere Aussage treffen zu können müsstest Du etwas von Deiner DB-Struktur erzählen.

    Ganz generell: SELECT * FROM {tabelle} WHERE {feld} LIKE '%$suchwort%';

    Bei mehreren Suchworten den Suchstring vorher mit explode(' ',$suchstring) zerstückeln und die SQL-Bedingung in einer Schleife zusammenbauen.

    Den Query am besten noch mit LIMIT eingrenzen und Seitenzahlen-Links per PHP ausgeben. Die Links müssen dann wieder auf die gleiche Seite führen, den Suchstring und einen Startpunkt für das LIMIT enthalten.
     
  3. michanismus

    michanismus MacUser Mitglied

    Beiträge:
    434
    Zustimmungen:
    0
    MacUser seit:
    23.08.2004
    Eine Suche in der MySQL DB mit LIKE empfehle ich dir nicht!
    Genau für soetwas gibt es den FULLTEXT Index. Also, mysql.com
    und FULLTEXT suchen.

    Gruß, Micha
     
  4. dms

    dms Gast

    Warum empfiehlst Du es nicht? Beides hat Vor- und Nachteile. Der Vorteil von einer Suche mit FULLTEXT/MATCH/AGAINST ist dass es etwas schneller ist (was aber bei kleinen Seiten nicht so sehr von Bedeutung ist) und die Relevanz direkt berechnet werden kann.
    Der Vorteil von LIKE ist dass auch Teilworte gefunden werden. Per MATCH/AGAINST wird z.B. nicht "wort" innerhalb von "antwort" gefunden.
    Beides hat natürlich seine Berechtigung.
     
  5. michanismus

    michanismus MacUser Mitglied

    Beiträge:
    434
    Zustimmungen:
    0
    MacUser seit:
    23.08.2004
    Das ist nicht richtig. Auch bei FULLTEXT gibt es die Möglichkeit
    in BOOLEAN MODE zu suchen, was auch Teilwörter einschliesst.
    (Siehe MySQL.com -> FULLTEXT / BOOLEAN)
    Ausserdem ist die Relevanz für genau solch eine Suche doch sehr
    wichtig.
    Ich habe solche Website Suchen bei nicht CMS Systemen immer mit
    FULLTEXT realisiert. Durch indizierte Seiteninhalte über Meta
    Tags, Titel der einzelnen Seiten, kombiniert mit einigen Tricks
    zur Relevanzberechnung ganrantiere ich dir "bessere" Such-
    ergebnisse!

    Ist nur ein Tip, nur wenn mans schon macht, sollte man auch die
    dafür entwickelten Funktionen einer Datenbank nutzen. Meine
    Meinung :)

    Gruß, Micha
     
  6. dms

    dms Gast

    Danke für den Tip. Das war mir unbekannt.
     
  7. Jakob

    Jakob MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    MacUser seit:
    05.01.2004
    Mal ganz pauschal gefragt:

    Ist es wirklich schneller? Habe hier eine Kundendatenbank (in etwa 8.000 Einträge). Wenn man nach nem Kunden sucht, wird bei mir die jeweilige Spalte mit LIKE durchsucht. Funktioniert ganz gut und schnell.
    Mein Problem damals war, dass alle Spalten durchsuchbar sein sollen. Mit FULLTEXT müsste man dann ja jede Spalte indizieren, was ja nicht so toll ist.
     
  8. michanismus

    michanismus MacUser Mitglied

    Beiträge:
    434
    Zustimmungen:
    0
    MacUser seit:
    23.08.2004
    Hi,

    schneller:
    Es ist auf jeden Fall schneller.
    Bei deinen Kundendaten standen auch sicher nur ein paar Wörter
    in jedem Feld, was natürlich auch die zu durchsuchene Daten-
    größe nicht wirklich in die Höhe treibt. Hättest du aber 8000
    Datensätze in denen bedeutet mehr Inhalt ist würdest du auch
    einen Unterschied "spüren".
    Ich dachte da so an 2000 kb bei 8000 Kundendaten vs.
    30000 kb bei 8000 indizierten HTML Seiten.

    Was an einer Indizierung "nicht toll" sein soll musst du mir
    echt mal erklären! :)

    Gruß, Micha
     
  9. Jakob

    Jakob MacUser Mitglied

    Beiträge:
    1.067
    Zustimmungen:
    21
    MacUser seit:
    05.01.2004
    Ich weiß leider nicht ab welchen Größenordnungen das bei mySQL gilt, generell ist eine Suche mit Index aber erstmal aufwendiger=langsamer, da er ja erst den Index und dann die Datensätze durchsucht (2 Vorgänge) und nicht nur die Datensätze (1 Vorgang).

    Leider hab ich keine Ahnung, ob das in meinem Fall mit den 8000 Kundendaten, also z.B. Suche nach der indizierten Nachname-Spalte schon schneller ist.
     
  10. michanismus

    michanismus MacUser Mitglied

    Beiträge:
    434
    Zustimmungen:
    0
    MacUser seit:
    23.08.2004
    Entschuldige, aber wer hat dir das denn bitte so erklärt???

    Ein INDEX ist meistens eine Spalte, nach der besonders häufig gesucht wird. Die Einträge in der Spalte werden als HASH Index gespeichert. Damit beschleunigt sich die Suche erheblich. Insbesondere bei Verknüpfungen von Tabellen wird MySQL dadurch erheblich schneller.

    Gruß, Micha
     
Die Seite wird geladen...

Diese Seite empfehlen