[MySQL] Volltextsuche

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [MySQL] Volltextsuche

    Hi Leute,
    ich will für mein Projekt eine Volltextsuche einbauen. Da bin ich jetzt auf die hauseigene Funktion von MySQL gestoßen und habe da natürlich erstmal eine Fragen zu:

    Meine Datenbank an sich besteht erstmal aus Links die mit Titeln versehen sind, also müsste ich ja erstmal die Seiteninhalte der Links in die Datenbank einlesen damit diese auch durchsucht werden können. Da könnte ich natürlich schon einiges an Performance sparen wenn ich HTML-Tags usw entferne.. Wenn es jetzt zur Suche kommt will ich bei den Suchergebnissen auch eine kleine "Vorschau" haben, also in etwa wie bei Google, dass der relevante Text der durchsuchten Seite mit dem/den Suchwort/wörtern schon in Teilen angezeigt wird. Wie lässt sich so etwas realisieren?
    Und was für Nachteile gibt es bei der Volltextsuche von MySQL? Ich hab da jetzt sowas gelesen, dass man an die voreingestellten Stop-Wörter gebunden ist und ähnliches..

    Schon mal Danke für die Antworten & noch einen schönen Feiertag :)

    Gruß

    Ollo
  • Ein Nachteil ist, dass die Sucheingabe bei einer MySQL Standardkonfiguration eine Mindestlänge von 3 Zeichen haben muss.
    Die Stopwörter sollten keine Probleme machen. Manchmal sind sie eben intelligenter als man selbst.

    Wenn du eine Webseite zum Thema PHP hast und der String "PHP" in jedem Titel genutzt wird, dann wirst du niemals einen Treffer zu PHP finden, weil es bei einer zu häufigen Verwendung automatisch als Stopwort hinzufügt wird.

    Wenn du mehr Speicher als Ressourcen hast, könntest du neben dem Original Input einen html bereinigten String speichern und diesen in der Volltextsuche indexieren.

    Lg

    Viele Infos wie gewohnt im MySQL Manual
  • Ok, Danke für die Antwort.
    Bin jetzt auf ein weiteres Problem gestoßen. Wenn ich den HTML-Code der einzelnen Links so bereinige, dass alle HTML-Tags weg sind, bleibt oft noch der Inhalt der <script> Tags und ähnliche Elemente über. Ist das jetzt sehr schlimm wenn die auch mit indiziert werden? Weil die haben ja an sich nichts mit dem Inhalt der eigentlichen Seite zu tun. Hab jetzt schon gegen sie mit Regulären Ausdrücken anzukommen

    Quellcode

    1. $i = preg_replace('<script(.*)>(.*)<\/script>','',$i);
    2. echo strip_tags($i);
    allerdings funktioniert das nicht ganz so, wie ich mir das vorstelle... Gibt es noch eine andere Möglichkeit den HTML-Code zu "bereinigen" ?

    Einen schönen Sonntag noch

    Gruß

    Ollo
  • Ok, das mit dem regulären Ausdruck hat sich erledigt , habs jetzt hinbekommen :) Nun ergeben sich aber 2 neue Fragen:
    1. Zeichen wie " ' ' " werden nach der "Behandlung" mit preg_replace nur noch fehlerhaft dargestellt. Liegt das am eingestellten charset? Wenn ja welches soll ich nehmen? Und auf welches charset soll die DB-Tabelle in der das ganze gespeichert werden soll eingestellt sein??

    2. Ich will ja meine Suche so bauen, dass, ähnlich wie bei google, bei den Suchergebnissen die betreffenden Textstellen der vorgeschlagenen Dokumente mit ausgespuckt werden und die Suchwörter markiert werden. Dazu müsste ich ja jetzt den Inhalt der Seiten doppelt speichern, oder? Also einmal bereinigt und komprimiert (Stopwörter schon entfernt, Leerstellen entfernt, andere unwichtige Zeichen usw entfernt .. ) und einmal "unbereinigt" aus welchem dann letzteres realisiert werden würde?? Oder gibt es da eine geschicktere Möglichkeit? Bzw. ist die Auslastung der Datenbank dadurch wesentlich höher??

    so long . . .

    Ollo