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ů