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