sql >> Databasteknik >  >> RDS >> Mysql

Jokerteckensökning i MySQL-fulltextsökning

Tyvärr kan du inte göra detta med ett MySQL-fulltextindex. Du kan inte hämta '*nited states' direkt från index eftersom vänstertecken är den viktigaste delen av indexet. Men du kan sök 'United Sta*' .

// the only possible wildcard full-text search in MySQL
WHERE MATCH(column) AGAINST ('United Sta*' IN BOOLEAN MODE)

MySQL:s fulltext fungerar bäst när man söker hela ord i meningar - även det kan suga ibland. Annars skulle jag föreslå att du använder en extern fulltextmotor som Solr eller Sphinx . Jag tror att Sphinx tillåter prefix och suffix jokertecken, osäker på de andra.

Du kan gå tillbaka till MySQL:s LIKE klausul, men återigen, kör frågor som LIKE '%nited states' eller LIKE '%nited Stat%' , kommer också att drabbas av prestanda, eftersom den inte kan använda indexet på de första tecknen. 'United Sta%' och 'Unit%States' är okej eftersom indexet kan användas mot det första gänget med kända tecken.

En annan ganska stor varning med att använda MySQL:s fulltextindexering är stoppordslistan och inställningar för minsta ordlängd . Till exempel, på en delad värdmiljö kommer du att vara begränsad till ord som är större än eller lika med 4 tecken. Så att söka "Goo" för att få "Google" skulle misslyckas. Stoppordslistan tillåter också vanliga ord som "och", "kanske" och "utanför" - i själva verket finns det 548 stoppord tillsammans! Återigen, om du inte använder delad hosting är dessa inställningar relativt lätta att ändra, men om du är det kommer du att bli irriterad på några av standardinställningarna.




  1. Java - Hur anropar man en orakelprocedur med anpassade typer?

  2. MySQL PÅ DUBLIKATNYCKELUPPDATERING för flera rader infoga i en enda fråga

  3. MySQL-vyer

  4. Django-DB-migrationer:kan inte ALTER TABLE eftersom den har väntande triggerhändelser