Apenas as palavras e os operadores têm significado no modo de pesquisa booleano. Os operadores são:
+
, -
, > <
, ( )
, ~
, *
, "
, @distance
. Depois de algumas pesquisas, descobri o que são os caracteres da palavra:Maiúsculas, Letras minúsculas, Numeral (dígito) e _
. Eu acho que você pode usar uma das duas abordagens:-
Substitua todos os caracteres que não sejam palavras por espaços (prefiro essa abordagem). Isso pode ser feito com regex:
$search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword);
-
Substitua os operadores de caracteres por espaços:
$search = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $keyword);
Somente as palavras são indexadas pelo mecanismo de pesquisa de texto completo e podem ser pesquisadas. Caracteres que não são palavras não são indexados, portanto, não faz sentido deixá-los na string de pesquisa.
Referências:
- Pesquisas booleanas de texto completo
- Ajuste da pesquisa de texto completo do MySQL (consulte:"Modificações do conjunto de caracteres")
- PHP:preg_replace
- PHP:propriedades de caracteres Unicode
- PHP:possíveis modificadores em padrões regex