Dr. Web Logo. Untertext: Seit 1997.
  • Beste Agenturen
  • Agentur-Standorte von A bis Z 🌇
  • Magazin
  • Newsletter 📩
  • Login
  • Agentur bewerben ✅
  • Kontakt
  • Werben 🎉
  • Sponsored Post
  • Jobs
Menü
  • Beste Agenturen
  • Agentur-Standorte von A bis Z 🌇
  • Magazin
  • Newsletter 📩
  • Login
  • Agentur bewerben ✅
  • Kontakt
  • Werben 🎉
  • Sponsored Post
  • Jobs
  • Werben
  • Gastbeitrag
  • Sponsored Post
  • Kontakt
  • Login
  • Newsletter
Suche
  • Beste Agenturen
  • Agentur-Standorte
      Berlin bei Nacht, Blick von oben Richtung Fernsehturm.

      Berlin

      Blick auf die Elbufer-Promenade Dresdens sowie Frauenkirche und Zwinger.

      Dresden

      Düsseldorf von oben mit Blick auf den Fernsehturm.

      Düsseldorf

      Blick von oben auf das Bankenviertel in Frankfurt am Main.

      Frankfurt am Main

      Hamburg bei Nacht, Blick auf die Speicherstadt.

      Hamburg

      Blick auf das Neue Rathaus, Hannover.

      Hannover

      Agenturen in Innsbruck von oben mit Blick auf die Alpen.

      Innsbruck

      Sonnenuntergang in Köln mit Blick auf den Dom. Im Vordergrund die Hohenzollernbrücke.

      Köln

      München bei Fön mit Blick in die bayerischen Alpen.

      München

      Stuttgart von oben.

      Stuttgart

      Wien von oben. Blick auf den Stephansdom.

      Wien

      Zürich von oben.

      Zürich

  • Magazin
    • Content Marketing
    • CSS
    • E-Commerce
    • E-Mail-Marketing
    • Freelancer
    • Fotografie
    • HTML
    • Online-Marketing
    • Responsive Design
    • SEO
    • UX Design
    • Webdesign
    • Website erstellen
    • WordPress
    • Dr. Web Autoren
  • Jobs
Menü
  • Magazin
    • Content Marketing
    • CSS
    • E-Commerce
    • E-Mail-Marketing
    • Freelancer
    • Fotografie
    • HTML
    • Online-Marketing
    • Responsive Design
    • SEO
    • UX Design
    • Webdesign
    • Website erstellen
    • WordPress
    • Dr. Web Autoren
  • Jobs
Agentur eintragen →
Dr. Web Logo. Untertext: Seit 1997.
  • Beste Agenturen
  • Agentur-Standorte
      Berlin bei Nacht, Blick von oben Richtung Fernsehturm.

      Berlin

      Blick auf die Elbufer-Promenade Dresdens sowie Frauenkirche und Zwinger.

      Dresden

      Düsseldorf von oben mit Blick auf den Fernsehturm.

      Düsseldorf

      Blick von oben auf das Bankenviertel in Frankfurt am Main.

      Frankfurt am Main

      Hamburg bei Nacht, Blick auf die Speicherstadt.

      Hamburg

      Blick auf das Neue Rathaus, Hannover.

      Hannover

      Agenturen in Innsbruck von oben mit Blick auf die Alpen.

      Innsbruck

      Sonnenuntergang in Köln mit Blick auf den Dom. Im Vordergrund die Hohenzollernbrücke.

      Köln

      München bei Fön mit Blick in die bayerischen Alpen.

      München

      Stuttgart von oben.

      Stuttgart

      Wien von oben. Blick auf den Stephansdom.

      Wien

      Zürich von oben.

      Zürich

Agentur eintragen →
Dr. Web » Webdesign » MySQL-Volltextsuche – Zwei Hindernisse und ein Weg drumherum

MySQL-Volltextsuche – Zwei Hindernisse und ein Weg drumherum

Die MySQL-Volltextsuche ist ein Segen für den Web-Programmierer, solange bis die ersten Einschränkungen für Shared-Hosting- und Managed-Server-Kunden auftreten. Schauen wir wie die Volltextsuche auch auf solchen Webservern vollständig genutzt werden kann....

Sozial sein
Share on facebook
Share on twitter
Share on linkedin
Share on xing
Share on whatsapp
Share on email
  • 5 Kommentare
Lesedauer: 8 Minuten
  • von Rene Schmidt
  • 14. Dezember 2006
Bookmarke mich
Share on pocket

Die MySQL-Volltextsuche ist ein Segen für den Web-Programmierer, solange bis die ersten Einschränkungen für Shared-Hosting- und Managed-Server-Kunden auftreten. Schauen wir wie die Volltextsuche auch auf solchen Webservern vollständig genutzt werden kann.

Die MySQL-Volltextsuche vereinfacht bereits seit Version 4.0.1 das Suchen mit booleschen Suchoperatoren wie UND, ODER, NICHT. Das an sich ist eine schöne Erleichterung für Web-Programmierer, denn sie müssen keinen Code zur Verarbeitung komplizierter Suchanfragen wie eins UND zwei UND („drei vier“ ODER („fünf sechs“ NICHT sieben)) schreiben. Solche Anfragen können mit den von MySQL unterstützten Suchoperatoren, direkt an den Server geschickt werden. Dazu bietet MySQL einen Algorithmus, der die Bewertung der Treffer erledigt, so dass auch dieses Rad nicht neu erfunden werden muss. Eine konfigurierbare Stoppwörterliste rundet die Volltextsuche ab.

Wie die Volltextsuche funktioniert, ist bereits in der Online-Dokumentation des Datenbanksystems beschrieben. Die eingebaute Volltextsuche von MySQL birgt allerdings einige Fallstricke, welche die Nutzung dieser Funktion erschweren.

Suchworte, die weniger als vier Zeichen lang sind
In der Standardkonfiguration werden Suchworte, die drei Zeichen lang oder kürzer sind, nicht berücksichtigt. Der Grund dafür ist, dass besonders bei großen zu durchsuchenden Datenbeständen die Serverlast zu stark steigen würde. Allerdings kann auf diese Weise nicht nach Abkürzungen wie SPD, CDU, ASP, PHP oder XML und so weiter gesucht werden – eine echte Behinderung. Dieses Verhalten der Datenbank ist heimtückisch, denn wenn die Datenbank nicht entsprechend eingestellt oder der Index nicht, wie folgt beschrieben, präpariert ist, werden „zu kurze“ Suchbegriffe vom Datenbank-Server stillschweigend ignoriert.

Root-Nutzer oder Systemadministratoren können diese Beschränkung durch eine entsprechende Serverkonfiguration umgehen. Dazu muss die MySQL-Konfigurationsdatei so wie in der MySQL-Dokumentation beschrieben verändert und der Server neu gestartet werden, weil die meisten Volltext-Variablen nicht zur Laufzeit zu ändern sind. Danach muss der Volltext-Index neu aufgebaut werden.

Nutzer von gemeinschaftlich genutzten Web-Servern („Shared-Hosting“) oder verwalteten Root-Servern („Managed-Server“) haben allerdings keinen Zugriff auf die MySQL-Konfigurationsdatei und können daher die Volltextsuche nicht für Wörter kleiner als vier Zeichen verwenden.

Eingebaute Stoppwörterliste
Das zweite Problem ist die in MySQL eingebaute Stoppwörterliste. In ihr sind alle Wörter enthalten, die statistisch gesehen häufig in Texten vorkommen und daher so wie kurze Wörter und Personalpronomen bei großen Datenbeständen zuviel Last hervorrufen würden. Die eingebaute Liste enthält englische Begriffe wie „but“, „can“, „do“, Personalpronomen wie „you“, „he“, „she“ und längere Wörter wie „consequently“. In der Liste sind allerdings auch Wörter zu finden, die in der deutschen Sprache nicht so häufig vorkommen wie englische Personalpronomen, beispielsweise „Brief“, „Plus“, „All“, „Last“ und „herein“. Diese Wörter gibt es sowohl im Englischen als auch – meist mit anderer Bedeutung – im Deutschen.

Selbstverständlich ist es möglich, alternative Stoppwörterlisten einzustellen – falls man Einfluss auf die MySQL-Konfiguration hat. Ansonsten gilt für die Konfiguration der Stoppwörterliste das Gleiche wie für die Suchwörter kleiner als vier Zeichen.

Lösung
Die Lösung für beide Probleme ist banal, vielleicht etwas unelegant – dafür funktioniert sie sehr gut. Sie ist nur für kleine Datenbestände geeignet. Wer größere Datenmengen durchsuchen lassen will, sollte auch die Mittel haben, einen eigenen Server aufzusetzen oder zu mieten – und dann kann man die Konfiguration einfach ändern.

Für alle, die es nicht können, zu kurze Wörter werden künstlich „aufgepumpt“. Aber vorsicht, man sollte Abkürzungen wie „XSL“ nicht auf vier Zeichen bringen, in dem man einfach ein Zeichen anhängt, zum (schlechten) Beispiel durch ein „T“. Das wäre dann „XSLT“, was themenverwandt zu „XSL“ ist, aber etwas anderes bedeutet. Bewährt hat es sich, das Wort zu doppeln und durch ein Zeichen zu trennen, etwa. „PHP“ -> „PHPxPHP“. Beim indexieren eines Textes müssen dessen Wörter entsprechend behandelt werden, ebenso müssen Suchbegriffe gegebenenfalls „aufgepumpt“ werden, damit Treffer erzielt werden. Wenn also jemand nach „PHP“ sucht, muss in der Datenbank nach „PHPxPHP“ gesucht werden.

Technisch betrachtet ist der Lösungsansatz sehr einfach, einfacher geht es wohl nicht, abgesehen von der direkten Konfiguration des Datenbank-Servers. In PHP (und in anderen Skriptsprachen) genügt ein Einzeiler:

 $str = preg_replace("/\b([a-zöäüß0-9]{3})\b/i", "$str = preg_replace("/\b([a-zöäüß0-9]{3})\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);

Erklärung des Ausdrucks: Ein regulärer Ausdruck wird auf die Variable $str angewandt, die Variable wird mit dem Ergebnis überschrieben. Der reguläre Ausdruck besagt, dass alles, was zwischen den zwei Wortgrenzen „\b“ steht (also Leerzeichen, Punkte usw.), aus den Zeichen A bis Z, 0-9, deutschen Umlauten und ß besteht und genau drei Zeichen lang ist, ersetzt wird – und zwar durch das Muster „_XXXCODEYYY_x_XXXCODEYYY_“. Dieses Muster besteht aus dem gedoppelten Treffer „_XXXCODEYYY_“, getrennt durch ein „x“. Der Suchmuster-Modifikator „i“ besagt, dass die Groß- und Kleinschreibung keine Rolle spielt. Aus „Photoshop CS2“ würde also „Photoshop CS2xCS2“ werden.

Auch durch die Standard-Stoppwörterliste „verbotene“ Wörter können im selben Ausdruck aufgepumpt werden, damit sie nicht mehr unter den Tisch fallen. Dazu erweitert man das Muster in den Klammern durch Alternativen, die durch „|“ getrennt werden:

      $str =
preg_replace("/\b([a-zöäüß0-9]{3}|plus|brief|all|last|herein)\b/i",
"_XXXCODEYYY_x_XXXCODEYYY_", $str);

Es ist auch möglich, nur ausgewählte Begriffe aufzupumpen. Der folgende Ausdruck wird nur auf „PHP“ und „ASP“ angewandt:

      $str = preg_replace("/\b(php|asp)\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);x$str = preg_replace("/\b([a-zöäüß0-9]{3})\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);

Erklärung des Ausdrucks: Ein regulärer Ausdruck wird auf die Variable $str angewandt, die Variable wird mit dem Ergebnis überschrieben. Der reguläre Ausdruck besagt, dass alles, was zwischen den zwei Wortgrenzen „\b“ steht (also Leerzeichen, Punkte usw.), aus den Zeichen A bis Z, 0-9, deutschen Umlauten und ß besteht und genau drei Zeichen lang ist, ersetzt wird – und zwar durch das Muster „_XXXCODEYYY_x_XXXCODEYYY_“. Dieses Muster besteht aus dem gedoppelten Treffer „_XXXCODEYYY_“, getrennt durch ein „x“. Der Suchmuster-Modifikator „i“ besagt, dass die Groß- und Kleinschreibung keine Rolle spielt. Aus „Photoshop CS2“ würde also „Photoshop CS2xCS2“ werden.

Auch durch die Standard-Stoppwörterliste „verbotene“ Wörter können im selben Ausdruck aufgepumpt werden, damit sie nicht mehr unter den Tisch fallen. Dazu erweitert man das Muster in den Klammern durch Alternativen, die durch „|“ getrennt werden:

      $str =
preg_replace("/\b([a-zöäüß0-9]{3}|plus|brief|all|last|herein)\b/i",
"_XXXCODEYYY_x_XXXCODEYYY_", $str);

Es ist auch möglich, nur ausgewählte Begriffe aufzupumpen. Der folgende Ausdruck wird nur auf „PHP“ und „ASP“ angewandt:

      $str = preg_replace("/\b(php|asp)\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);", $str);

Erklärung des Ausdrucks: Ein regulärer Ausdruck wird auf die Variable $str angewandt, die Variable wird mit dem Ergebnis überschrieben. Der reguläre Ausdruck besagt, dass alles, was zwischen den zwei Wortgrenzen „\b“ steht (also Leerzeichen, Punkte usw.), aus den Zeichen A bis Z, 0-9, deutschen Umlauten und ß besteht und genau drei Zeichen lang ist, ersetzt wird – und zwar durch das Muster „$str = preg_replace(„/\b([a-zöäüß0-9]{3})\b/i“, „_XXXCODEYYY_x_XXXCODEYYY_“, $str);

Erklärung des Ausdrucks: Ein regulärer Ausdruck wird auf die Variable $str angewandt, die Variable wird mit dem Ergebnis überschrieben. Der reguläre Ausdruck besagt, dass alles, was zwischen den zwei Wortgrenzen „\b“ steht (also Leerzeichen, Punkte usw.), aus den Zeichen A bis Z, 0-9, deutschen Umlauten und ß besteht und genau drei Zeichen lang ist, ersetzt wird – und zwar durch das Muster „_XXXCODEYYY_x_XXXCODEYYY_“. Dieses Muster besteht aus dem gedoppelten Treffer „_XXXCODEYYY_“, getrennt durch ein „x“. Der Suchmuster-Modifikator „i“ besagt, dass die Groß- und Kleinschreibung keine Rolle spielt. Aus „Photoshop CS2“ würde also „Photoshop CS2xCS2“ werden.

Auch durch die Standard-Stoppwörterliste „verbotene“ Wörter können im selben Ausdruck aufgepumpt werden, damit sie nicht mehr unter den Tisch fallen. Dazu erweitert man das Muster in den Klammern durch Alternativen, die durch „|“ getrennt werden:

      $str =
preg_replace("/\b([a-zöäüß0-9]{3}|plus|brief|all|last|herein)\b/i",
"_XXXCODEYYY_x_XXXCODEYYY_", $str);

Es ist auch möglich, nur ausgewählte Begriffe aufzupumpen. Der folgende Ausdruck wird nur auf „PHP“ und „ASP“ angewandt:

      $str = preg_replace("/\b(php|asp)\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);x$str = preg_replace("/\b([a-zöäüß0-9]{3})\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);

Erklärung des Ausdrucks: Ein regulärer Ausdruck wird auf die Variable $str angewandt, die Variable wird mit dem Ergebnis überschrieben. Der reguläre Ausdruck besagt, dass alles, was zwischen den zwei Wortgrenzen „\b“ steht (also Leerzeichen, Punkte usw.), aus den Zeichen A bis Z, 0-9, deutschen Umlauten und ß besteht und genau drei Zeichen lang ist, ersetzt wird – und zwar durch das Muster „_XXXCODEYYY_x_XXXCODEYYY_“. Dieses Muster besteht aus dem gedoppelten Treffer „_XXXCODEYYY_“, getrennt durch ein „x“. Der Suchmuster-Modifikator „i“ besagt, dass die Groß- und Kleinschreibung keine Rolle spielt. Aus „Photoshop CS2“ würde also „Photoshop CS2xCS2“ werden.

Auch durch die Standard-Stoppwörterliste „verbotene“ Wörter können im selben Ausdruck aufgepumpt werden, damit sie nicht mehr unter den Tisch fallen. Dazu erweitert man das Muster in den Klammern durch Alternativen, die durch „|“ getrennt werden:

      $str =
preg_replace("/\b([a-zöäüß0-9]{3}|plus|brief|all|last|herein)\b/i",
"_XXXCODEYYY_x_XXXCODEYYY_", $str);

Es ist auch möglich, nur ausgewählte Begriffe aufzupumpen. Der folgende Ausdruck wird nur auf „PHP“ und „ASP“ angewandt:

      $str = preg_replace("/\b(php|asp)\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);". Dieses Muster besteht aus dem gedoppelten Treffer "$str = preg_replace("/\b([a-zöäüß0-9]{3})\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);

Erklärung des Ausdrucks: Ein regulärer Ausdruck wird auf die Variable $str angewandt, die Variable wird mit dem Ergebnis überschrieben. Der reguläre Ausdruck besagt, dass alles, was zwischen den zwei Wortgrenzen „\b“ steht (also Leerzeichen, Punkte usw.), aus den Zeichen A bis Z, 0-9, deutschen Umlauten und ß besteht und genau drei Zeichen lang ist, ersetzt wird – und zwar durch das Muster „_XXXCODEYYY_x_XXXCODEYYY_“. Dieses Muster besteht aus dem gedoppelten Treffer „_XXXCODEYYY_“, getrennt durch ein „x“. Der Suchmuster-Modifikator „i“ besagt, dass die Groß- und Kleinschreibung keine Rolle spielt. Aus „Photoshop CS2“ würde also „Photoshop CS2xCS2“ werden.

Auch durch die Standard-Stoppwörterliste „verbotene“ Wörter können im selben Ausdruck aufgepumpt werden, damit sie nicht mehr unter den Tisch fallen. Dazu erweitert man das Muster in den Klammern durch Alternativen, die durch „|“ getrennt werden:

      $str =
preg_replace("/\b([a-zöäüß0-9]{3}|plus|brief|all|last|herein)\b/i",
"_XXXCODEYYY_x_XXXCODEYYY_", $str);

Es ist auch möglich, nur ausgewählte Begriffe aufzupumpen. Der folgende Ausdruck wird nur auf „PHP“ und „ASP“ angewandt:

      $str = preg_replace("/\b(php|asp)\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);",

getrennt durch ein „x“. Der Suchmuster-Modifikator „i“ besagt, dass die Groß- und Kleinschreibung keine Rolle spielt. Aus „Photoshop CS2“ würde also „Photoshop CS2xCS2“ werden.

Auch durch die Standard-Stoppwörterliste „verbotene“ Wörter können im selben Ausdruck aufgepumpt werden, damit sie nicht mehr unter den Tisch fallen. Dazu erweitert man das Muster in den Klammern durch Alternativen, die durch „|“ getrennt werden:

      $str =
preg_replace("/\b([a-zöäüß0-9]{3}|plus|brief|all|last|herein)\b/i",
"$str = preg_replace("/\b([a-zöäüß0-9]{3})\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);

Erklärung des Ausdrucks: Ein regulärer Ausdruck wird auf die Variable $str angewandt, die Variable wird mit dem Ergebnis überschrieben. Der reguläre Ausdruck besagt, dass alles, was zwischen den zwei Wortgrenzen „\b“ steht (also Leerzeichen, Punkte usw.), aus den Zeichen A bis Z, 0-9, deutschen Umlauten und ß besteht und genau drei Zeichen lang ist, ersetzt wird – und zwar durch das Muster „_XXXCODEYYY_x_XXXCODEYYY_“. Dieses Muster besteht aus dem gedoppelten Treffer „_XXXCODEYYY_“, getrennt durch ein „x“. Der Suchmuster-Modifikator „i“ besagt, dass die Groß- und Kleinschreibung keine Rolle spielt. Aus „Photoshop CS2“ würde also „Photoshop CS2xCS2“ werden.

Auch durch die Standard-Stoppwörterliste „verbotene“ Wörter können im selben Ausdruck aufgepumpt werden, damit sie nicht mehr unter den Tisch fallen. Dazu erweitert man das Muster in den Klammern durch Alternativen, die durch „|“ getrennt werden:

      $str =
preg_replace("/\b([a-zöäüß0-9]{3}|plus|brief|all|last|herein)\b/i",
"_XXXCODEYYY_x_XXXCODEYYY_", $str);

Es ist auch möglich, nur ausgewählte Begriffe aufzupumpen. Der folgende Ausdruck wird nur auf „PHP“ und „ASP“ angewandt:

      $str = preg_replace("/\b(php|asp)\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);x$str = preg_replace("/\b([a-zöäüß0-9]{3})\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);

Erklärung des Ausdrucks: Ein regulärer Ausdruck wird auf die Variable $str angewandt, die Variable wird mit dem Ergebnis überschrieben. Der reguläre Ausdruck besagt, dass alles, was zwischen den zwei Wortgrenzen „\b“ steht (also Leerzeichen, Punkte usw.), aus den Zeichen A bis Z, 0-9, deutschen Umlauten und ß besteht und genau drei Zeichen lang ist, ersetzt wird – und zwar durch das Muster „_XXXCODEYYY_x_XXXCODEYYY_“. Dieses Muster besteht aus dem gedoppelten Treffer „_XXXCODEYYY_“, getrennt durch ein „x“. Der Suchmuster-Modifikator „i“ besagt, dass die Groß- und Kleinschreibung keine Rolle spielt. Aus „Photoshop CS2“ würde also „Photoshop CS2xCS2“ werden.

Auch durch die Standard-Stoppwörterliste „verbotene“ Wörter können im selben Ausdruck aufgepumpt werden, damit sie nicht mehr unter den Tisch fallen. Dazu erweitert man das Muster in den Klammern durch Alternativen, die durch „|“ getrennt werden:

      $str =
preg_replace("/\b([a-zöäüß0-9]{3}|plus|brief|all|last|herein)\b/i",
"_XXXCODEYYY_x_XXXCODEYYY_", $str);

Es ist auch möglich, nur ausgewählte Begriffe aufzupumpen. Der folgende Ausdruck wird nur auf „PHP“ und „ASP“ angewandt:

      $str = preg_replace("/\b(php|asp)\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);", $str);

Es ist auch möglich, nur ausgewählte Begriffe aufzupumpen. Der folgende Ausdruck wird nur auf „PHP“ und „ASP“ angewandt:

      $str = preg_replace("/\b(php|asp)\b/i", "$str = preg_replace("/\b([a-zöäüß0-9]{3})\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);

Erklärung des Ausdrucks: Ein regulärer Ausdruck wird auf die Variable $str angewandt, die Variable wird mit dem Ergebnis überschrieben. Der reguläre Ausdruck besagt, dass alles, was zwischen den zwei Wortgrenzen „\b“ steht (also Leerzeichen, Punkte usw.), aus den Zeichen A bis Z, 0-9, deutschen Umlauten und ß besteht und genau drei Zeichen lang ist, ersetzt wird – und zwar durch das Muster „_XXXCODEYYY_x_XXXCODEYYY_“. Dieses Muster besteht aus dem gedoppelten Treffer „_XXXCODEYYY_“, getrennt durch ein „x“. Der Suchmuster-Modifikator „i“ besagt, dass die Groß- und Kleinschreibung keine Rolle spielt. Aus „Photoshop CS2“ würde also „Photoshop CS2xCS2“ werden.

Auch durch die Standard-Stoppwörterliste „verbotene“ Wörter können im selben Ausdruck aufgepumpt werden, damit sie nicht mehr unter den Tisch fallen. Dazu erweitert man das Muster in den Klammern durch Alternativen, die durch „|“ getrennt werden:

      $str =
preg_replace("/\b([a-zöäüß0-9]{3}|plus|brief|all|last|herein)\b/i",
"_XXXCODEYYY_x_XXXCODEYYY_", $str);

Es ist auch möglich, nur ausgewählte Begriffe aufzupumpen. Der folgende Ausdruck wird nur auf „PHP“ und „ASP“ angewandt:

      $str = preg_replace("/\b(php|asp)\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);x$str = preg_replace("/\b([a-zöäüß0-9]{3})\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);

Erklärung des Ausdrucks: Ein regulärer Ausdruck wird auf die Variable $str angewandt, die Variable wird mit dem Ergebnis überschrieben. Der reguläre Ausdruck besagt, dass alles, was zwischen den zwei Wortgrenzen „\b“ steht (also Leerzeichen, Punkte usw.), aus den Zeichen A bis Z, 0-9, deutschen Umlauten und ß besteht und genau drei Zeichen lang ist, ersetzt wird – und zwar durch das Muster „_XXXCODEYYY_x_XXXCODEYYY_“. Dieses Muster besteht aus dem gedoppelten Treffer „_XXXCODEYYY_“, getrennt durch ein „x“. Der Suchmuster-Modifikator „i“ besagt, dass die Groß- und Kleinschreibung keine Rolle spielt. Aus „Photoshop CS2“ würde also „Photoshop CS2xCS2“ werden.

Auch durch die Standard-Stoppwörterliste „verbotene“ Wörter können im selben Ausdruck aufgepumpt werden, damit sie nicht mehr unter den Tisch fallen. Dazu erweitert man das Muster in den Klammern durch Alternativen, die durch „|“ getrennt werden:

      $str =
preg_replace("/\b([a-zöäüß0-9]{3}|plus|brief|all|last|herein)\b/i",
"_XXXCODEYYY_x_XXXCODEYYY_", $str);

Es ist auch möglich, nur ausgewählte Begriffe aufzupumpen. Der folgende Ausdruck wird nur auf „PHP“ und „ASP“ angewandt:

      $str = preg_replace("/\b(php|asp)\b/i", "_XXXCODEYYY_x_XXXCODEYYY_", $str);", $str);

Der Effekt ist derselbe wie bei den drei Zeichen langen Treffern. Zur Erinnerung: dieser Reguläre Ausdruck muss auf den zu durchsuchenden Textbestand und auf die eingegebenen Suchbegriffe angewandt werden. Der Textbestand muss nur einmal vor Indexieren, der Suchbegriff bei jeder Eingabe präpariert werden. ™

Links zum Thema:

  • MySQL-Dokumentation (deutsch)
  • Perl-kompatible Reguläre Ausdrücke (deutsch)

Erstveröffentlichung 14.12.2006

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0

Rene Schmidt

Rene Schmidt

Agenturpartner

Critch GmbH – Immobilienkanzlei FREITAG®

München

DAZECON – Webdesign und Marketing

Dresden

WPSteinheisser Photography

Ludwigsburg

KnallBlauMedia

Hamburg

PromoMasters Online Marketing

Wien

Alle Agenturpartner

Jobs

Senior SEO Manager

München

Webtexter für SEO Agentur

Salzburg (Österreich)

Inside Sales Manager

Karlsruhe

Junior SEO Manager in München

München

Online Marketing Manager

München

Zum richtigen Job

Newsletter

Tipps, Tricks, Ratgeber. Unser Newsletter: Jeden Dienstag frisch gedruckt in Deinem Mail-Postfach.

Lust auf mehr? Wir empfehlen folgende Artikel:

Webdesign Trends 2022: Das erwartet uns

Animation, Interaktion und Immersion: Das neue Jahr bringt zahlreiche Trends im Webdesign mit sich und entwickelt einzelne Bereiche weiter. Bereits jetzt ist klar – in Sachen Webdesign-Trends hat das Jahr 2022 einiges zu bieten.

 →   

Google Fonts sind nicht mehr datenschutzkonform. Was nun?

Mit dem Urteil des Landgerichts München vom 20.01.2022 ist nun auch die Verwendung von Google Fonts über die Fonts API nicht mehr datenschutzkonform. Zeit sich nach einer Lösung umzusehen, wie Du dennoch Google Fonts weiterhin einsetzen kannst.

 →   

Dunkel Design – herzlich willkommen auf Dr. Web

Wir freuen uns, dass Moritz Dunkel mit seiner Agentur DNKL.DSGN aus Köln an Bord ist. Moritz Dunkel von Dunkel Design verstärkt unser Agentur-Netzwerk. Inhaltsstarke Seiten

 →   

5 Antworten zu „MySQL-Volltextsuche – Zwei Hindernisse und ein Weg drumherum“
— was ist Deine Meinung?

  1. Illya sagt:
    19. August 2010 um 22:39 Uhr

    @chris und alle anderen: die lösung ist folgende:
    $str=“photoshop cs2″;
    $str = preg_replace(„/\b([a-zöäüß0-9]{3})\b/i“, „$1*$1“, $str);
    str hat dann „photoshop cs2*cs2“
    Ich weiss auch nicht warum der Autor _XXXCODEYYY_ verwendet, auch das Trenn-X ist nicht richtig, es funktioniert zB mit dem *, das ist ein Trennzeichen für mysql.
    Ich habe es getestet und funzt…:)
    Ich hoffe das Layout zerschiesst den Code nicht!

    Antworten
    1. Frank sagt:
      13. September 2010 um 9:19 Uhr

      @IIIya: Deine Lösung ist so nicht ganz korrekt:
      Wie du bereits richtig festgestellt hast, gilt der * in Mysql als Trennzeichen. Genau deshalb kann man ihn hier nicht verwenden, da die MySQL-Volltextsuche bei der Suche nach dem Begriff „cs2*cs2“ den * als Trennzeichen verwendet und entsprechend nach „cs2 cs2“ bzw. „cs2“ sucht. Somit hätten wir wieder nur 3 Zeichen und die Suche würde kein Ergebnis liefern (Wenn es bei dir funktioniert, hast du bestimmt die Serverkonfiguration auf 3 Zeichen eingestellt).
      Wenn man den * durch beispielsweise ein „x“ ersetzt, müsste es funktionieren!

      Antworten
  2. Chris sagt:
    23. August 2009 um 22:33 Uhr

    Hi,
    Es scheint mir, der Lösungs-Ansatz wird hier x-mal wiederholt (in meinem Browser werden 2-3 Abschnitte ca. 10 mal identisch wiederholt!). Da vermute ich, dass vieleich andere Teile gar nicht ausgespuckt/dargestellt werden. Da mich die Lösung interessiert, möchte ich wenn möglich genau das sehen, was der Autor geschrieben hat. U.a. verstehe ich nicht, wie eine Suche mit SUCHWORTxSUCHWORT in meiner Datenbank etwas finden sollte, wenn in meiner Datenbank nur SUCHWORT drin steht…
    Danke für Ihre Hilfe,
    Chris

    Antworten
  3. Sven Lennartz sagt:
    7. Oktober 2008 um 8:21 Uhr

    das template validiert durchaus. es hat auch nichts mit tabellen zu tun. es liegt schlicht daran das der import in das CMS am 5.10.08 an einigen stellen nicht zu 100% geklappt hat. zum beispiel hier.

    inzwischen habe ich es repariert. es war lediglich ein verrutschter pre- tag, der sorgte dann gleich für 100 weitere fehler und die kaputte optik.

    Antworten
  4. Nikki sagt:
    7. Oktober 2008 um 5:35 Uhr

    Hi,

    immer wieder wird geraten CSS abstelle von Tabellen zu
    nutzen, aber wenn ich sehe wie, hier zb., das Design mal
    wieder durch Float zerissen wird, frage ich mich warum.

    Nebenbei, wie kann es sein, dass gerade deine Seite,
    schliesslich eine Referenz für Webseitenaufbau/hilfe, so viele Fehler beim Validator hat?

    Nikki

    Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Dr. Web Logo weiss.

Pionier für Digitale Transformation. Seit 1997. ✅  Wissen, Tipps, Ratgeber, Dienstleister: Wir bringen wir die digitale Transformation von Unternehmen praxisnah voran.

Share on facebook
Share on twitter
Share on linkedin
Share on xing
Share on whatsapp
Share on email

Wissen finden

  • Dr. Web Autoren
  • Amazon SEO
  • Content Marketing
  • CMS
  • CSS
  • Digitalisierung
  • E-Commerce
  • Freelancer
  • Jobs & Karriere
  • Online-Marketing
  • SEO
  • UX Design
  • Webdesign
  • Website erstellen
  • WordPress
  • WooCommerce
Menü
  • Dr. Web Autoren
  • Amazon SEO
  • Content Marketing
  • CMS
  • CSS
  • Digitalisierung
  • E-Commerce
  • Freelancer
  • Jobs & Karriere
  • Online-Marketing
  • SEO
  • UX Design
  • Webdesign
  • Website erstellen
  • WordPress
  • WooCommerce

Rechtliches

  • Datenschutzerklärung
  • Geschäftsbedingungen (AGB)
  • Impressum
  • Kontakt
  • Nach oben ↑
Menü
  • Datenschutzerklärung
  • Geschäftsbedingungen (AGB)
  • Impressum
  • Kontakt
  • Nach oben ↑

Für Agenturen & Unternehmer

  • Als Agentur eintragen
  • Beste Agenturen finden
  • Städte: von A bis Z.
  • Agenturen in Augsburg
  • Agenturen in Basel
  • Agenturen in Berlin
  • Agenturen in Bochum
  • Agenturen in Bonn
  • Agenturen in Bremen
  • Agenturen in Dortmund
  • Agenturen in Dresden
  • Agenturen in Duisburg
  • Agenturen in Düsseldorf
  • Agenturen in Essen
  • Agenturen in Frankfurt am Main
  • Agenturen in Freiburg
  • Agenturen in Hamburg
  • Agenturen in Hannover
  • Agenturen in Innsbruck
  • Agenturen in Karlsruhe
  • Agenturen in Köln
  • Agenturen in Leipzig
  • Agenturen in München
  • Agenturen in Münster
  • Agenturen in Nürnberg
  • Agenturen in Offenbach am Main
  • Agenturen in Regensburg
  • Agenturen in Salzburg
  • Agenturen in Stuttgart
  • Agenturen in Wien
  • Agenturen in Zürich
  • Digitalagentur finden
  • Webdesign-Agentur finden
  • Werbeagentur finden
Menü
  • Als Agentur eintragen
  • Beste Agenturen finden
  • Städte: von A bis Z.
  • Agenturen in Augsburg
  • Agenturen in Basel
  • Agenturen in Berlin
  • Agenturen in Bochum
  • Agenturen in Bonn
  • Agenturen in Bremen
  • Agenturen in Dortmund
  • Agenturen in Dresden
  • Agenturen in Duisburg
  • Agenturen in Düsseldorf
  • Agenturen in Essen
  • Agenturen in Frankfurt am Main
  • Agenturen in Freiburg
  • Agenturen in Hamburg
  • Agenturen in Hannover
  • Agenturen in Innsbruck
  • Agenturen in Karlsruhe
  • Agenturen in Köln
  • Agenturen in Leipzig
  • Agenturen in München
  • Agenturen in Münster
  • Agenturen in Nürnberg
  • Agenturen in Offenbach am Main
  • Agenturen in Regensburg
  • Agenturen in Salzburg
  • Agenturen in Stuttgart
  • Agenturen in Wien
  • Agenturen in Zürich
  • Digitalagentur finden
  • Webdesign-Agentur finden
  • Werbeagentur finden
Das große Dr. Web Icon-Set: 970+ Icons, im SVG-Format​

Lade Dir jetzt das Icon-Set
kostenlos herunter ↓

Über 970 Dr. Web-Icons, kostenlos.
Danke nein, ist nichts für mich.
Invalid email address
Vielen Dank! Bitte schau noch in Dein Postfach und bestätige die Anmeldung.