sql >> Databáze >  >> RDS >> Mysql

Escape řetězec pro použití ve fulltextovém vyhledávání MySQL

V booleovském vyhledávacím režimu mají význam pouze slova a operátory. Operátory jsou:+ , - , > < , ( ) , ~ , * , " , @distance . Po nějakém výzkumu jsem zjistil, co jsou to slovní znaky:Velká písmena, Malá písmena, Číslice (číslice) a _ . Myslím, že můžete použít jeden ze dvou přístupů:

  1. Nahraďte všechny neslovní znaky mezerami (preferuji tento přístup). Toho lze dosáhnout pomocí regulárního výrazu:

    $search = preg_replace('/[^\p{L}\p{N}_]+/u', ' ', $keyword);
    
  2. Nahraďte znaky-operátory mezerami:

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

Pouze slova jsou indexována fulltextovým vyhledávačem a lze je vyhledávat. Neslovní znaky nejsou indexovány, takže nemá smysl je nechávat ve vyhledávacím řetězci.

Odkazy:



  1. MariaDB JSON_ARRAY_INSERT() Vysvětleno

  2. Problémy s porovnáním MySQL s pohyblivou řádovou čárkou

  3. jak uložit obsah ckeditoru v databázi mysql

  4. POUŽÍVEJTE HINT a DISABLE_OPTIMIZED_NESTED_LOOP