Volltextsuche: Datenbank oder Programm?
-
Ich möchte gerne eine Volltextsuche in bestimmten Spalten einer Tabelle durchführen. Zuzeit habe ich das so in einem Javaprogramm gelöst:
- SELECT * FROM tabelle_in_der_ich_suchen_möchte und schreibe alles in einen java.util.vector
- Nimm den Vektor und durchsuche ihn nach den gewünschten Daten
Die Frage die sich mir nun stellt: Ist das überhaupt vernünftig vom Geschwindigkeitsaspekt her? Wenn die Tabelle viele Einträge besitzt und es viele Suchanfragen gibt, ist das sicherlich nicht der Königsweg. Wie könnte man es besser machen, oder ist es ok so?
-
Wenn die Datenbank von sich aus keine Volltextsuche unterstützt, würde ich eine UDF schreiben, die das übernimmt. Dann braucht der Krempel gar nicht erst zum Client übertragen werden.
-
Oh stimmt. Ich habe vergessen zu sagen, daß ich MySQL benutze.
Aber ist es schlimm wenn der Krempel
erst zum Javaprogramm übertragen werden muss? Ich benutze dort Regular Expression um in der Ergebnisliste zu suchen.
-
MySQL hat doch eine ganz akzeptable Volltextsuche. Zumindest die MyISAM Volltextindizes sind eigentlich recht nett.
-
Wenn du RegExps verwendest und die Results alle in einem Vector speicherst, ist es warhscheinlich performancemäßig ziemlich egal, welche Technik du verwendest.
Gerade unter Java würde ich mir noch die Volltextdb Lucene anschauen. Damit kann man sehr effektiv und umfassend(und schnell) Querien - skaliert richtig implementiert sicherlich besser als eine MyISAM Volltextsuche.
-
Ich würde sagen, es kommt drauf an, wo die Datenbank liegt. Wenn sie lokal liegt, dürfte es keinen grossartigen Unterschied machen, ob du's der DB überlässt, oder es selbst machst. Wenn die Daten dagegen über's Netz müssen dürfte es sich stärker bemerkbar machen.