sql >> Database >  >> RDS >> Mysql

Escape-tekenreeks voor gebruik bij zoeken in volledige tekst in MySQL

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:

  1. 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);
    
  2. 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:



  1. Hoe MySQL-tijd te converteren

  2. Oracle Database 21c

  3. SQL Server - Verwijder alle niet-afdrukbare ASCII-tekens

  4. Hoe te voorkomen dat de time-out van de vergrendeling de uitzondering heeft overschreden.?