Programmation » Recherche via query MySQL...
Recherche via query MySQL...
Publié le 03/10/2006 @ 01:18:23,
Par zionComme 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?
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?
Je suis le Roy
Recherche via query MySQL...
Publié le 03/10/2006 @ 02:00:05,
Par maxtu as essayé soundex(str) ?
avec ton exemples:
renvoit 'S532' pour les quatres cas.
Dernière édition: 03/10/2006 @ 02:00:41
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.
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');
soundex('saint-jacques'),
soundex('saint jacques'),
soundex('saint jacque'),
soundex('saintjacque');
renvoit 'S532' pour les quatres cas.
Dernière édition: 03/10/2006 @ 02:00:41
Trololo
Recherche via query MySQL...
Publié le 03/10/2006 @ 09:47:35,
Par ovhP'tain intéressant ça, je note
Je n'ai rien à voir avec www.ovh.com
Recherche via query MySQL...
Publié le 03/10/2006 @ 10:35:09,
Par gizmoLe 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.
Concept vivant.
Recherche via query MySQL...
Publié le 03/10/2006 @ 11:43:54,
Par etikPerso, 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().
Recherche via query MySQL...
Publié le 03/10/2006 @ 12:13:12,
Par philfrPour 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...
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...
Recherche via query MySQL...
Publié le 03/10/2006 @ 12:44:06,
Par zionMerci 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
Dernière édition: 03/10/2006 @ 12:44:22
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
Dernière édition: 03/10/2006 @ 12:44:22
Je suis le Roy
Recherche via query MySQL...
Publié le 03/10/2006 @ 13:51:50,
Par cauetComme 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.
J'avoue n'avoir jamais plaçé cette fonction dans mon code, c'est très très spécifique.
Recherche via query MySQL...
Publié le 03/10/2006 @ 14:06:07,
Par ovhhttp://www.nexen.net/actualites/trucs/appliquer_la_logique_floue_a_une_table_mys- ql.php
Je n'ai rien à voir avec www.ovh.com
Recherche via query MySQL...
Publié le 03/10/2006 @ 14:19:36,
Par zionovh> Alors ça c'est pas mal du tout comme fonction, je vais l'essayer tiens!
Je suis le Roy
Recherche via query MySQL...
Publié le 03/10/2006 @ 14:54:03,
Par zionThere 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: ’
----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
Je suis le Roy
Recherche via query MySQL...
Publié le 03/10/2006 @ 14:57:24,
Par zionBon, .... 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
On va donc se la jouer bourrin comme prévu
Je suis le Roy
Recherche via query MySQL...
Publié le 03/10/2006 @ 17:15:37,
Par antpTu 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)
Dernière édition: 03/10/2006 @ 17:16:07
Dernière édition: 03/10/2006 @ 17:16:07
mes programmes ·· les voitures dans les films ·· champion des excuses bidons
Recherche via query MySQL...
Publié le 03/10/2006 @ 17:36:22,
Par zionLe full-text est pas prévu pour ça non plus
Je suis le Roy