Kun ordene og operatorerne har betydning i boolsk søgetilstand. Operatører er:+
, -
, > <
, ( )
, ~
, *
, "
, @distance
. Efter lidt research fandt jeg ud af, hvad ordtegn er:Store bogstaver, Små bogstaver, Tal (cifre) og _
. Jeg tror, du kan bruge en af to tilgange:
-
Erstat alle ikke-ord-tegn med mellemrum (jeg foretrækker denne fremgangsmåde). Dette kan opnås med regex:
$search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword);
-
Erstat tegn-operatorer med mellemrum:
$search = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $keyword);
Kun ord indekseres af fuldtekst søgemaskine og kan søges. Ikke-ord-tegn indekseres ikke, så det giver ikke mening at lade dem være i søgestrengen.
Referencer:
- Boolske fuldtekstsøgninger
- Finjustering af MySQL fuldtekstsøgning (se:"Tegnsætændringer")
- PHP:preg_replace
- PHP:Unicode-tegnegenskaber
- PHP:Mulige modifikatorer i regex-mønstre