sql >> Database teknologi >  >> RDS >> Mysql

Escape-streng til brug i MySQL fuldtekstsøgning

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:

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



  1. Genforbindelse på MySQL-serveren er gået væk

  2. Fortsætter Indsætter i Oracle, når undtagelsen er rejst

  3. Oracle til PostgreSQL:START MED / FORBIND VED

  4. REGEXP_COUNT() Funktion i Oracle