Hallo,
@RWarnecke
Du baust da gerade etwas, was ich vor einiger Zeit gemacht habe, daher hier eine kurze Beschreibung meiner Lösung:
- Eine Tabelle für alle vorkommenden Wörter.
- Eine Tabelle für die Texte, in denen gesucht werden soll.
- Eine Tabelle, die diese 1:n-Beziehung auflöst.
Wenn ein Text gespeichert wird, so wird er in seine Wörter zerlegt, die Wörter werden (soweit nicht vorhanden) in die Worttabelle aufgenommen und die 1:n-Beziehung wird entsprechend ergänzt. Mehrfach im Text vorkommende Wörter werden natürlich nur einmal in die 1:n-Tabelle aufgenommen.
Damit muss beim Suchen nicht im
SQL und/oder im Quelltext "herumgehampelt" werden, sondern die Abfrage kann über reines
SQL erfolgen und ist durch die Benutzung des entsprechenden Index auch bei großen Datenmengen schnell, da Like und Co. entfallen können.
Als Schmakerl enthält die Worttabelle eine zusätzliche Spalte mit den Werten für die Kölner Phonetik, so dass auch nach (leichten) Unschärfen gesucht werden kann, ohne den Abfrageaufwand zu erhöhen. Durch das Parsen der Texte vor dem Speichern (Auflösung in Worte, Erstellung der Kölner Phonetik) dauert das Speichern geringfügig länger, aber der Vorteil für die Suche, sowohl bei den Inhalten als auch bei der Geschwindigkeit, macht diesen Aufwand locker wieder wett.
Ansonsten:
select * from tabelle where textspalte like '% :Suchwort %'
Dabei muss die zu suchende Zeichenfolge alleine stehen.
Probleme:
- Erstes Wort im Text, da ein '% ' zuviel
- hinter dem Wort befindliche Satzzeichen.
- ggfls. letztes Wort, wenn kein Leerzeichen folgt.