03/10/2006 @ 01:18:23: zion: Recherche via query MySQL...
Comme il y a plus d'idées dans 2 têtes que dans une, je lance un avis à la solution la plus simple à implémenter ( je suis un peu fade sur ce coup là
).
J'ai une table avec des items (des produits) et pour la recherche, on me demande que:
saint-jacques
saint jacques
renvoie toujours le produit saint-jacques, quoi qu'il arrive. (en généralisant bien sûr). Il faut donc condenser et ne garder que les lettres en virant les caractères spéciaux.
C'est sur une table existante en MySQL, j'ai la flemme de me faire une fonction pour condenser le tout et le j'ai jamais testé le full text search de MySQL (est-ce qu'il prévoit ce genre de choses?
).
Donc ma solution actuelle ce serait de rajouter un champ et de le "condenser" à chaque modif et de me baser la dessus pour la recherche.
Any better idea?
03/10/2006 @ 02:00:05: max: Recherche via query MySQL...
tu as essayé soundex(str) ?
SOUNDEX(str)
Returns a soundex string from str. Two strings that sound almost the same should have identical soundex strings. A standard soundex string is four characters long, but the SOUNDEX() function returns an arbitrarily long string. You can use SUBSTRING() on the result to get a standard soundex string. All non-alphabetic characters in str are ignored. All international alphabetic characters outside the A-Z range are treated as vowels.
avec ton exemples:
select
soundex('saint-jacques'),
soundex('saint jacques'),
soundex('saint jacque'),
soundex('saintjacque');
renvoit 'S532' pour les quatres cas.
03/10/2006 @ 09:47:35: ovh: Recherche via query MySQL...
P'tain intéressant ça, je note
03/10/2006 @ 10:35:09: gizmo: Recherche via query MySQL...
Le probleme avec soundex, c'est que ce n'est pas locale, donc ici tu as de la chance parce que la prononciation anglaise de tes exemples matche bien, mais ce n'est pas toujours le cas. De meme, te risque de te chopper seint-jack comme son identique, ce qui n'est pas specialement ce qui est demande.
03/10/2006 @ 11:43:54: etik: Recherche via query MySQL...
Perso, j'utilise la function levenshtein() de PHP. Calcule la 'distance' entre deux strings tout comme similar_text() mais j'ai de meilleur resultat avec levenshtein().
03/10/2006 @ 12:13:12: philfr: Recherche via query MySQL...
Pour ton cas particulier, peut-être vaut-il mieux que supprimes tous les caractères non alpha, et que tu convertisses tout en majuscules p.ex.
Sauf si tu veux aussi que ton exemple matche avec sain-jaques... Mais alors tu entres dans le monde du flou et de l'approximatif qui ne colle pas très bien avec le traitement algorithmique de l'information. À part faire comme google et indexer toutes les orthographes approximatives...
03/10/2006 @ 12:44:06: zion: Recherche via query MySQL...
Merci pour les réponses
philfr> Je pense que j'ai pas le choix parce qu'en fait, si le mec cherche "jacques", ça doit aussi me renvoyer Saint-Jacques alors que SoundEx ne va pas me le faire vu qu'il travaille sur tout le string (je suppose
).
Pareil avec levenshtein() (que je ne connaissais pas du tout, merci!), sauf que la en plus je devrais le faire en PHP alors que j'ai toutes mes données (et parfois un gros pavé de texte) dans une table MySQL.
Ca deviendra donc SAINTJACQUES et je vais faire comme avant... un like comme une brute
03/10/2006 @ 13:51:50: cauet: Recherche via query MySQL...
Comme le dit gizmo, j'ai vite abandonné SoundEx() à cause des locales.. il peux te pomper des mots qui sont phonétiquements corrects.. dans une autre langue!
J'avoue n'avoir jamais plaçé cette fonction dans mon code, c'est très très spécifique.
03/10/2006 @ 14:06:07: ovh: Recherche via query MySQL...
03/10/2006 @ 14:19:36: zion: Recherche via query MySQL...
ovh> Alors ça c'est pas mal du tout comme fonction, je vais l'essayer tiens!
03/10/2006 @ 14:54:03: zion: Recherche via query MySQL...
There is a chance that you may have found a bug in the SQL parser. Please examine your query closely, and check that the quotes are correct and not mis-matched. Other possible failure causes may be that you are uploading a file with binary outside of a quoted text area. You can also try your query on the MySQL command line interface. The MySQL server error output below, if there is any, may also help you in diagnosing the problem. If you still have problems or if the parser fails where the command line interface succeeds, please reduce your SQL query input to the single query that causes problems, and submit a bug report with the data chunk in the CUT section below:
----BEGIN CUT----
eNqFjs1ugkAUhffzFGfhQhPAgUqF2SGOP8nA0BmqaXdUSEuCQEEb+xo+cbFddNFFc3f3nvt9hysl
FUNoI3QgeMwwm2PmwZ5TotPhciUk3GmG0TZn6N+rNuv6orOq8sVq31rjA47l3MGhdDal3pT6oDZz
HOb6qIqjD35pMSLRp34QA9qiluOa/Smr86zLzap5JY9aQWoDwZrHqYEdH5z7skYkn7dCBHAtSpIo
YIPn3qJmWzkk2SS3nCH1DTkMRFmfL0QE8ZqhqM2yb0zPc33TJt9ezQUPUyRdk8fZsVh1BqIgDTcY
/64mQ4NgG+sU46sIXbqNsZBS8CAeqiz5BFmP/tB0BVkpGaEdHs+HU0/2G674/7gr/gCJVEuusHj6
4WLJdfgF3nptEQ==
----END CUT----
----BEGIN RAW----
ERROR: C1 C2 LEN: 47 48 170
STR: ’
Ca a l'air d'aller d'enfer
03/10/2006 @ 14:57:24: zion: Recherche via query MySQL...
Bon, .... en cherchant un peu ca a pas l'air super efficace ce match in boolean mode, LC50 me renvoie 0 pour LC-50, supaire
On va donc se la jouer bourrin comme prévu
03/10/2006 @ 17:15:37: antp: Recherche via query MySQL...
Tu testes pas le fulltext avant ? (ça fait un bout de temps que je me dis que je devrais le tester pour la recherche des titres sur imcdb, je ne l'ai toujours pas fait)
03/10/2006 @ 17:36:22: zion: Recherche via query MySQL...
Le full-text est pas prévu pour ça non plus