Le 02/02/16 à 13:14, BERBAR Florian <[email protected]> a écrit :
BF> -----BEGIN PGP SIGNED MESSAGE----- BF> Hash: SHA256 BF> BF> On 02/02/2016 11:34, [email protected] wrote: BF> > Bonjour, BF> > BF> > Désolé de cette question pas 100% Debian, mais MySQL tourne sous BF> > Debian Jessie :-) BF> > BF> > $brief est une variable correspondant à un mot clé qui ne peut BF> > contenir que 3 infos maxi séparées par un espace. BF> > BF> > On va supposer que le mot clé = "paris" BF> > BF> > SELECT DISTINCT email, prenom, famille, ville FROM table WHERE BF> > MATCH (email, prenom, famille, ville) AGAINST ('+$brief[0] BF> > +$brief[1] +$brief[2]' IN BOOLEAN MODE) BF> > BF> > et la base affiche toutes les personnes qui ont une info liée à BF> > Paris. BF> > BF> > Mais si le mot clé =" par" la base ne m'affiche aucun résultat. BF> > Elle ne va matcher que les infos qui contiennent * exactement * BF> > "par" BF> > BF> > J'ai tenté cette méthode (ajouter un "%" de part et d'autres de la BF> > variable) : AGAINST ('+%$brief[0]% +%$brief[1]% +%$brief[2]%' IN BF> > BOOLEAN MODE) ça ne fonctionne pas. BF> > BF> > Dommage, car c'est utile lorsque on est pas sûr de l'orthographe BF> > d'un champ, et que l'on a retenu que ses x premières lettres. BF> > BF> > Il y a cette méthode mais trop basique car elle ne permet pas des BF> > recherches sur mots clés multiples : SELECT DISTINCT email, prenom, BF> > famille, ville FROM table WHERE email LIKE '%$brief%' OR ville LIKE BF> > '%$brief%' ... BF> > BF> > Ma question : comment le faire avec : ... WHERE MATCH ... AGAINST BF> > BF> > Merci. BF> > BF> > André BF> > BF> BF> Bonjour André, BF> BF> Je en regardant la requête SQL utilisant la fonction AGAINST que tu BF> essais d’exécuter, nous pouvoir voir que tu tentes d'utiliser le BF> caractère joker (wildcard) '%' afin de compléter les mots clefs BF> servant de critère à ta requête à l'image de ce que tu pourrais faire BF> à l'aide de la fonction LIKE. BF> BF> La documentation de MySQL au sujet du couple de fonction MATCH et BF> AGAINST BF> (https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html#function_m BF> atch), BF> ne fait pas référence à la possibilité d'utiliser des caractères BF> jokers (wildcard) à l'image de ce que tu pourrais faire avec la BF> fonction LIKE BF> (https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.htm BF> l#operator_like). BF> Il semblerait que tu sois contraint à l’utilisation de mot complet. De mémoire pour ce genre de chose il fallait effectivement indexer soi-même les mots et les "début de mot". Un SGBDR est pas très performant sur ce genre de chose (même si postgresql fait un peu mieux je crois), pour de gros volume ajouter un solr ou elasticsearch est finalement plus simple (on le configure une fois en lui donnant les champs à indexer et il fournit autocompletion et recherche par facette, entre autre). Pour de petits volume, faut ajouter un peu de code. -- Daniel La vie est trop courte pour qu'on soit pressé. Henry David Thoreau

