Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So führen Sie eine mehrspaltige MySQL-Volltextsuche durch, bei der Teilwörter abgeglichen werden

Im booleschen Modus wird das Erfordernis, dass Strings vorhanden sind (anstatt nur eine höhere Punktzahl zu erzielen), mit + ausgeführt . Präfixabgleich erfolgt mit einem endenden * . Dies scheint das zu sein, was Sie wollen, also suchen Sie nach:

+John* +S*
+John* +Smith*
+Smith* +J*
+Jo* +S*

Beachten Sie, dass Volltextindizes Ihnen nicht helfen können, „irgendwo in einem Wort“ zu suchen. also etwas wie *mith* scheitern:Sie sollen ab Zeichen 1 in einem Index passen.

Wenn Sie sie auch nach Übereinstimmungswerten sortieren möchten und beispielsweise John Smith benötigen vorher Johnny Smithson , würden Sie Folgendes tun:

 SELECT * FROM user 
 WHERE MATCH(..fields..) AGAINST ('match' IN BOOLEAN MODE)
 ORDER BY MATCH(..fields..) AGAINST ('match' IN BOOLEAN MODE) DESC;

Was Sie sehen werden, bringt Sie nirgendwohin, wenn Sie nicht alle Wörter>=ft_min_word_len hinzufügen nochmal separat:

+John* +S* John
+John* +Smith* John Smith
+Smith* +J* Smith
+Jo* +S*

Für das letzte sind beide ft_min_world_len festlegen anders gewünscht.