V booleovském vyhledávacím režimu mají význam pouze slova a operátory. Operátory jsou:+
, -
, > <
, ( )
, ~
, *
, "
, @distance
. Po nějakém výzkumu jsem zjistil, co jsou to slovní znaky:Velká písmena, Malá písmena, Číslice (číslice) a _
. Myslím, že můžete použít jeden ze dvou přístupů:
-
Nahraďte všechny neslovní znaky mezerami (preferuji tento přístup). Toho lze dosáhnout pomocí regulárního výrazu:
$search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword);
-
Nahraďte znaky-operátory mezerami:
$search = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $keyword);
Pouze slova jsou indexována fulltextovým vyhledávačem a lze je vyhledávat. Neslovní znaky nejsou indexovány, takže nemá smysl je nechávat ve vyhledávacím řetězci.
Odkazy:
- Booleovská fulltextová vyhledávání
- Jemné vyladění fulltextového vyhledávání MySQL (viz:"Úpravy znakové sady")
- PHP:preg_replace
- PHP:Vlastnosti znaků Unicode
- PHP:Možné modifikátory ve vzorech regulárních výrazů