sql >> Databasteknik >  >> RDS >> Mysql

Escape-sträng för användning i MySQL-fulltextsökning

Endast orden och operatorerna har betydelse i booleskt sökläge. Operatörer är:+ , - , > < , ( ) , ~ , * , " , @distance . Efter lite forskning hittade jag vad ordtecken är:versaler, gemener, siffror (siffra) och _ . Jag tror att du kan använda en av två metoder:

  1. Ersätt alla icke-ordstecken med mellanslag (jag föredrar detta tillvägagångssätt). Detta kan åstadkommas med regex:

    $search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword);
    
  2. Byt ut teckenoperatorer med mellanslag:

    $search = preg_replace('/[+\-><\(\)~*\"@]+/', ' ', $keyword);
    

Endast ord indexeras av fulltext sökmotor och kan sökas. Tecken som inte är ord indexeras inte, så det är inte meningsfullt att lämna dem i söksträngen.

Referenser:



  1. MySql-fel:1364 Fältet 'display_name' har inte standardvärde

  2. Skapa en MySQL-användare på Linux via kommandoraden

  3. Len() vs datalength() i SQL Server 2005

  4. C# Parameteriserad fråga MySQL med "in"-sats