Julian von Mendel: (MySQL) Inhale indizieren für Volltextsuche

Hi,

ich möchte eine Volltextsuche umsetzen. Sie sollte einigermaßen performant arbeiten (die Suche, bei der Indizierung ist die Performanz nicht soo wichtig). Die zu indizierenden Daten liegen in einer MySQL-Datenbank. Kennt jemand bereits fertige Implementationen einer Indizierung bzw. eine Klasse die für mich indiziert, die in sauberem PHP5 geschrieben ist und falls sie Datenbankzugriff benötigt PDO verwendet? Wenn nein, sehe ich es richtig, dass man eine Indizierung wie folgt selbst implementiert?
Man geht alle zu indizierenden Daten durch, konvertiert sie in kleingeschriebene Einzelwörter, merkt sich in der DB in einer Spalte das Wort und in einer anderen die Dokumente in denen es wie häufig vorkommt. Bei der Suche sucht man alle Wörter in der DB und prüft bei welchen Dokumenten die gesuchten Wörter insg. am häufigsten vorkommen. Aber wie macht man es dass man z. B. Wortketten sucht, d.h. in Anführungszeichen eingeschlossene Wörter nur in Verbindung gelten lässt? Funktionen wie und/oder-Verknüpfung, Wörter ausschließen und Wildcards sind mir relativ klar glaube ich.
Wenn man Aufwand sparen könnte in dem man eine fertige Implementation nutzt würde mir das halt besser gefallen *g*. Wenn wir schon dabei sind: Ist dieses "Ich tippe einen Suchbegriff und per Ajax klappen sich gleich passende Dokumente aus" sinnvoll? Muss ich es selbst implementieren, gibt es bereits gute Umsetzungen? Mir ist es wichtig dass das die Eingabe nicht verlangsamt (ich kenne ein Formular, da braucht jedes Zeichen bis es mal auf dem Bildschirm steht >3s, weil die ihre blöden Ergänzungsvorschläge ausklappen müssen).
Wie stellt man die Ergebnisse am besten dar? Mit Ausschnitten aus dem den Suchbegriffen umgebenden Text, oder mit kurzen Dokumentbeschreibungen? Wie ermittelt man die Ausschnitte aus dem Text, die die Suchbegriffe umgeben? Mein Problem liegt dabei nicht beim finden des Textausschnittes, sondern dass Google z. B. bei sehr vielen Suchbegriffen oder Wörtern die im Dokument häufig vorkommen trotzdem nur 1, 2 Ausschnitte anzeigt.
Wie kann Google in einer derart hohen Geschwindigkeit einen so großen Index durchsuchen, wo doch die Forumssuche hier schon länger braucht, um alte Beiträge zu finden?

Schöne Grüße
Julian

  1. Nochwas: Um Rechtschreibfehler in den Suchbegriffen zu erkennen, nimmt man da einfach Soundex wenn nix gefunden und geht den Index nochmal durch, oder gibt es da noch bessere Techniken? Funktioniert Soundex auch mit französischen Texten ertragbar?

    Schöne Grüße
    Julian

  2. Hallo Julian,

    ich möchte eine Volltextsuche umsetzen. Sie sollte einigermaßen performant arbeiten (die Suche, bei der Indizierung ist die Performanz nicht soo wichtig). Die zu indizierenden Daten liegen in einer MySQL-Datenbank.

    die einfachste Methode, mit MySQL eine Volltextsuche umzusetzen, ist mit Sicherheit die MySQL-eigene Volltextsuche. Entscheide, ob Dir dies reicht.

    Freundliche Grüße

    Vinzenz

    1. Hi Vinzenz,

      danke für deine Antwort.

      ich möchte eine Volltextsuche umsetzen. Sie sollte einigermaßen performant arbeiten (die Suche, bei der Indizierung ist die Performanz nicht soo wichtig). Die zu indizierenden Daten liegen in einer MySQL-Datenbank.

      die einfachste Methode, mit MySQL eine Volltextsuche umzusetzen, ist mit Sicherheit die MySQL-eigene Volltextsuche. Entscheide, ob Dir dies reicht.

      In meiner Datenbank steht nicht nur Text - es kann auch HTML-/PHP-Code enthalten sein. Wenn ich das richtig sehe müsste ich also die Inhalte dieser Tabelle in eine zweite kopieren, wo ich jegliches HTML/PHP bereits rausgefiltert habe, damit bei einer Suche nach HTML-Tags nicht Seiten erscheinen, die nichts damit zu tun haben, sondern nur zufällig dieses Tag verwenden. Korrekt? Weiterhin würde ich durch die Verwendung der integrierten MySQL-Suche den großen Vorteil von PDO aufgeben, dass ich durch Änderung eines Parameters die SQL-Datenbank wechseln kann - da SQLite z. B. diese Suche nicht unterstützt.

      Mir gefällt die eingebaute Suche irgendwie nicht so. Sie scheint nicht sehr viele Möglichkeiten zu bieten. Aber selbst wenn ich sie verwenden würde - es interessieren mich Alternativlösungen trotzdem.

      Schöne Grüße
      Julian