Solo las palabras y los operadores tienen significado en el modo de búsqueda booleano. Los operadores son:+
, -
, > <
, ( )
, ~
, *
, "
, @distance
. Después de investigar un poco, encontré qué son los caracteres de las palabras:mayúsculas, minúsculas, números (dígito) y _
. Creo que puedes usar uno de dos enfoques:
-
Reemplace todos los caracteres que no sean palabras con espacios (prefiero este enfoque). Esto se puede lograr con expresiones regulares:
$search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword);
-
Reemplace caracteres-operadores con espacios:
$search = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $keyword);
Solo las palabras están indexadas por el motor de búsqueda de texto completo y se pueden buscar. Los caracteres que no son palabras no están indexados, por lo que no tiene sentido dejarlos en la cadena de búsqueda.
Referencias:
- Búsquedas booleanas de texto completo
- Ajuste fino de la búsqueda de texto completo de MySQL (ver:"Modificaciones del juego de caracteres")
- PHP:preg_replace
- PHP:propiedades de caracteres Unicode
- PHP:Posibles modificadores en patrones regex