Volltextsuche: MySQL volltextsuche

Hallo,

ich nutze MariaDB und möchte dort eine Volltextsuche machen lassen. Als ich die Anleitung zur Volltextsuche gelesen habe, habe ich das so verstanden, dass die Volltextsuche nur ganze Wörter, die durch ein Leerzeichen getrennt sind, erschließt.

Muster: MySQL

Text: MySQL ist gut (hit)
Text: MySQList gut (kein hit)

Habe ich das so richtig verstanden? Ich möchte eigentlich weil es sich für die Strucktur meiner Seite eigentlich anbietet, einige Daten als "Array" durch die PHP Funktion serialize speichern. Hier geht es wieder um Performance.

Ist eine lange Tabelle sinnvoll (Spalten) oder wenige Spalten und dann mit der Methode. Die Frage ist für mich, wie kann ich Effektiv die Daten mit hoher Geschwindigkeit suchen. Durch Serialize würden meine Datensätze innerhalb einer Spalte etwa so aussehen:

Spaltenname:Datensatz;Spaltenname2:Datensatz2

Bin ich auf dem richtigen Weg, ist die Volltextsuche hier das was ich brauche oder muss ich auf die gewohnte Abfrage zurück greifen. Welche Methode würdet ihr mir empfehlen oder gibt es noch etwas anderes?

Grüße,
Torsten

  1. Meine Herren!

    Als ich die Anleitung zur Volltextsuche gelesen habe, habe ich das so verstanden, dass die Volltextsuche nur ganze Wörter, die durch ein Leerzeichen getrennt sind, erschließt. […] Habe ich das so richtig verstanden?

    Ja, ich verstehe das auch so, mit dem Boolean-Mode kannst du zumindest auch nach Präfixen suchen, Suffixe oder Infixe gehen scheinbar gar nicht.

    Ich möchte eigentlich weil es sich für die Strucktur meiner Seite eigentlich anbietet, einige Daten als "Array" durch die PHP Funktion serialize speichern. Hier geht es wieder um Performance.

    Damit tust du dir vermutlich keinen Gefallen. MariaDBs ist spezialisiert auf die Arbeit mit großen Datenmengen und kann die üblichen Operationen darauf sehr viel schneller ausführen als PHP das könnte. Speichere die Daten lieber in normalisierter Form in der Datenbank, lege wenn nötig einen angepassten View für die Daten an und benutze einen geeigneten fetch-style, um das Ergebnis in PHP Objekte umzuwandeln.

    Ist eine lange Tabelle sinnvoll (Spalten) oder wenige Spalten und dann mit der Methode.

    Wichtig ist, dass die Spalten logisch und normalisiert aufgeteilt sind, es gibt ein paar Faust-Regeln, an die du dich richten solltest.

    Die Frage ist für mich, wie kann ich Effektiv die Daten mit hoher Geschwindigkeit suchen.

    Das macht MariaDB für dich. Ausschlaggebend für die Bearbeitungsdauer einer Volltextsuche ist vor allem die Größe des Suchindexes, da spielt es keine Rolle, ob er sich über ein oder zwei Spalten erstreckt.

    Durch Serialize […]

    … machst du dir das Leben schwer.

    Bin ich auf dem richtigen Weg, ist die Volltextsuche hier das was ich brauche oder muss ich auf die gewohnte Abfrage zurück greifen.

    Ja, die Volltext-Suche scheint schon geeignet für dein Anliegen, den Serialize-Quatsch vergisst du besser schnell wieder.

    --
    “All right, then, I'll go to hell.” – Huck Finn
  2. hi,

    Bin ich auf dem richtigen Weg, ist die Volltextsuche hier das was ich brauche oder muss ich auf die gewohnte Abfrage zurück greifen. Welche Methode würdet ihr mir empfehlen oder gibt es noch etwas anderes?

    Freilich gibt es auch andere Möglichkeiten. Wieviele Objekte bzw. Datensätze hast Du denn, die durchsucht werden sollen?

    Was ich von MySQL her kenne: Ohne Feintuning hast Du an der Volltextsuche nicht viel Freude, da brauchst Du Zugriff auf die Serverkonfiguration.

    Was ich verwende, ist das Perl-Modul Text::Query, mit der Volltextsuche auf meiner Seite werden derzeit ca. 400 Dokumente durchsucht, die serialisiert in einer linearen Datenbank (Dateilösung) als Objekte abgelegt sind. Die Suche ist performant, leider gibt es in PHP für Text::Query nichts Vergleichbares.

    MfG