Nur die Wörter und Operatoren haben im booleschen Suchmodus eine Bedeutung. Operatoren sind:+
, -
, > <
, ( )
, ~
, *
, "
, @distance
. Nach einiger Recherche fand ich heraus, was Wortzeichen sind:Großbuchstaben, Kleinbuchstaben, Ziffern (Ziffern) und _
. Ich denke, Sie können einen von zwei Ansätzen verwenden:
-
Ersetzen Sie alle Nicht-Wort-Zeichen durch Leerzeichen (ich bevorzuge diesen Ansatz). Dies kann mit Regex erreicht werden:
$search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword);
-
Zeichen-Operatoren durch Leerzeichen ersetzen:
$search = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $keyword);
Nur Wörter werden von der Volltextsuchmaschine indiziert und können durchsucht werden. Nicht-Wort-Zeichen werden nicht indiziert, daher ist es nicht sinnvoll, sie in der Suchzeichenfolge zu belassen.
Referenzen:
- Boolesche Volltextsuche
- Feinabstimmung der MySQL-Volltextsuche (siehe:"Zeichensatzänderungen")
- PHP:preg_replace
- PHP:Unicode-Zeicheneigenschaften
- PHP:Mögliche Modifikatoren in Regex-Mustern