Rolf B: Text-Suche: Sonderzeichen in der DB sind ein Problem

Beitrag lesen

Hallo Linuchs,

hatten wir das Thema nicht schon mal? Vielleicht nicht bei Dir.

Wenn Du das performant lösen willst, brauchst Du in der DB eine Extraspalte, die die zu durchsuchenden Texte normalisiert enthält. Bei der Erstbefüllung musst Du einen Job über die DB laufen lassen, und in Folge musst Du bei Updates das Suchfeld mit updaten.

  • Akzente entfernen
  • Sonderzeichen durch Leerstellen ersetzen
  • danach: mehrfache Leerstellen zu einer standardisieren
  • großschrift beseitigen (wobei ich nicht weiß ob es Sprachen gibt wo das ein Problem sein könnte)

Das ist, wenn es international laufen soll, nicht so einfach. Bei den Akzentzeichen und Groß-/Kleinschreibung kann dir ggf. MYSQL helfen, wenn Du eine Collation mit CI und AI verwendest (das kann man im Zweifelsfall im SQL mit der COLLATE Klausel festlegen, oder auch in der Tabellendefinition für die Spalte). Wenn CI und AI funktionieren, kannst Du die Pflege des Suchfeldes ggf. auch durch einen Update-Trigger lösen; das entfernen von Sonderzeichen und mehrfachen Leerstellen könnte sich innerhalb von MySQL lösen lassen.

Bei den Leerstellen achte auch auf Unicode-Sonderleerstellen.

Wenn Du das Suchfeld hast, kannst Du Suchbegriffe nach den gleichen Regeln aufbereiten und damit eine LIKE Suche starten. Oder Du guckst Dir die Volltext-Suchfunktion von MySQL an (habe ich selbst noch nicht genutzt), ob die das ganze vereinfachen kann.

Ich hoffe, dass das zielführend ist.

Bei jeder Suche alle durchsuchten Textfelder in der DB on the fly zu normalisieren solltest Du jedenfalls nicht tun. Das ist zu langsam.

Rolf

--
sumpsi - posui - obstruxi