Alleen de woorden en operatoren hebben betekenis in de Booleaanse zoekmodus. Operators zijn:+
, -
, > <
, ( )
, ~
, *
, "
, @distance
. Na wat onderzoek heb ik gevonden wat woordtekens zijn:hoofdletters, kleine letters, cijfer (cijfer) en _
. Ik denk dat je twee benaderingen kunt gebruiken:
-
Vervang alle niet-woordtekens door spaties (ik geef de voorkeur aan deze benadering). Dit kan worden bereikt met regex:
$search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword);
-
Vervang karakters-operators door spaties:
$search = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $keyword);
Alleen woorden worden geïndexeerd door de volledige tekstzoekmachine en kunnen worden doorzocht. Niet-woordtekens worden niet geïndexeerd, dus het heeft geen zin om ze in de zoekreeks te laten staan.
Referenties:
- Booleaanse zoekopdrachten in volledige tekst
- Fine-Tuning MySQL Full-Text Search (zie:"Aanpassingen karakterset")
- PHP:preg_replace
- PHP:Unicode-tekeneigenschappen
- PHP:Mogelijke modificaties in regex-patronen