Endast orden och operatorerna har betydelse i booleskt sökläge. Operatörer är:+
, -
, > <
, ( )
, ~
, *
, "
, @distance
. Efter lite forskning hittade jag vad ordtecken är:versaler, gemener, siffror (siffra) och _
. Jag tror att du kan använda en av två metoder:
-
Ersätt alla icke-ordstecken med mellanslag (jag föredrar detta tillvägagångssätt). Detta kan åstadkommas med regex:
$search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword);
-
Byt ut teckenoperatorer med mellanslag:
$search = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $keyword);
Endast ord indexeras av fulltext sökmotor och kan sökas. Tecken som inte är ord indexeras inte, så det är inte meningsfullt att lämna dem i söksträngen.
Referenser:
- Booleska fulltextsökningar
- Finjustera MySQL fulltextsökning (se:"Teckenuppsättningsändringar")
- PHP:preg_replace
- PHP:Unicode-teckenegenskaper
- PHP:Möjliga modifierare i regexmönster