Christoph: Suchen aus Datenbank

Hallo,

ich habe eine Homepage, deren Inhalte alle in Tabellen in einer MySQL Datenbank stehen. Nun meine Frage, kann ich jetzt auch eine Suche programmieren, wo man gezielt nach Wörtern suchen kann? Über alle Tabellen?
Ich weiß das es die MySQL-Volltextsuche gibt, meine MySQL Version ist die 4.0.16 und wäre demnach auch in der Lage, jedoch habe ich gelesen das man bei der Volltextsuche nur bestimmte Wörter suchen kann. Z.b. nach Bauer, aber ein Bauernhof findet dann die Datenbank nicht :/
Gibt es jetzt eine andere Möglichkeit mit php? Früher gabs mal %wort1% aber das soll ja dermaßen die Datenbank belasten das man sowas nicht mehr benutzt...

Würde mich auf Antwort freuen

Grüße

cg

--
Ich bin ein spezialisz!
(Zitat von VENGA JO)
sh:) fo:) rl:° br:& ie:| mo:) va:) fl:) ss:| ls:< js:|
Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
  1. Hallo,

    ich habe eine Homepage, deren Inhalte alle in Tabellen in einer MySQL Datenbank stehen. Nun meine Frage, kann ich jetzt auch eine Suche programmieren, wo man gezielt nach Wörtern suchen kann? Über alle Tabellen?

    Ueber alle Tabellen und Felder zu suchen, ist ineffizient und Ressourcenverschwendung.

    Ich wuerde eher eine extra Tabelle machen als Grundlage fuer die Suchmaschine.

    Ich habe etwa folgendes im Einsatz:

    Tabelle Suchmaschinenbasis

    Felder:
    id
    url
    seitentitel (z.B. das, was bei der Seite selbst in <title> oder <h1> steht)
    wichtig (title, h1, keywords)
    alles (title, ganzer Inhalt der Seite nach strip_tags())
    tolerant (ganzer Inhalt nach Umwandlung mit gewissen String-Funktionen,
        z.B. Ersetzen von Umlauten u.s.w.)

    Die Suche beschraenkt sich nun auf drei Felder.
    Pro Suchbegriff mache ich drei Queries:
    Wenn es im Feld "wichtig" einen Treffer gibt, kriegt die Seite 100 Punkte.
    Wenn es im Feld "alles" einen Treffer gibt, 10 Punkte
    Wenn es im Feld "tolerant" einen Treffer gibt, 1 Punkt. (Der Suchbegriff
       wird fuer diese Suche genauso umgewandelt wie das Feld "tolerant".)

    Die Punkte pro id (Seite) werden zusammengezaehlt.

    Dann kann ich die Suchresultate nach Relevanz geordnet anzeigen,
    wobei ich den Link gleich aus der URL und dem Seitentitel (als Linktext)
    zusammenbaue.

    Mit den tollen neuen Suchfunktionen von MySQL 4 kenne ich mich
    nicht aus, da mir diese leider auf den Webservern, wo meine Projekte
    laufen, noch nicht zur Verfuegung habe.

    LIKE %begriff% ist IMHO schon OK, wenn man es nicht uebertreibt.

    Der grosse Knackpunkt ist IMHO die Fehlertoleranz.
    Ist halt die Frage, wie weit gehen will.
    Z.B. ob die Suche nach "Zirkus" auch Seiten mit "Circus" finden soll.
    Gerade im wissenschaftlichen Umfeld, wo es viele verschiedene
    Schreibweisen von "lateinischen/griechischen" Fachbegriffen gibt,
    ist das ein echtes Problem.

    ---

    Die dclp-FAQ-Artikel zum Thema hast Du ja hoffentlich schon gefunden:
    http://www.dclp-faq.de/q/q-mysql-volltextsuche.html
    http://www.dclp-faq.de/q/q-scripte-volltextsuche.html

    HTH, Gruesse,

    Thomas