Mysql
 sql >> Base de données >  >> RDS >> Mysql

comment utiliser Fuzzy look up pour trouver la phrase en SQL ?

Ce n'est pas une question simple. Votre meilleur pari est d'utiliser un certain type de recherche en texte intégral . La recherche en texte intégral peut être configurée pour avoir des mots vides (mots qui sont omis de la recherche - comme le mot the ) et peut également avoir une limite de longueur de mot minimale (les mots contenant moins de certains caractères sont également omis de la recherche.

Cependant, si vous utilisez simplement

SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');

Ensuite, MySQL renverra non seulement l'enregistrement avec la valeur que vous recherchiez, mais les enregistrements contenant uniquement certains mots, et dans un ordre différent. Celui que vous avez montré sera probablement l'un des mieux classés, mais rien ne garantit qu'il sera le mieux classé.

Vous pouvez utiliser recherche booléenne en texte intégral et ajouter + à chaque mot de recherche pour forcer MySQL à renvoyer uniquement les enregistrements contenant tous les mots de recherche présents :

SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);

Mais, on doit être un mot vide (il figure sur les listes de mots vides par défaut) ou doit être plus court que la longueur minimale du mot, il doit donc être omis de l'expression de recherche (vous n'obtiendrez aucun résultat) :

SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);

Je sais que cela nécessite une modification de l'expression de recherche, mais cela vous permettra d'obtenir les meilleurs résultats en utilisant la fonctionnalité intégrée de MySQL.

L'alternative consiste à utiliser d'autres moteurs de recherche en texte intégral, tels que sphinx pour effectuer la recherche pour vous.