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