Broceliande Posted March 23, 2011 Share Posted March 23, 2011 Depuis son passage à prestashop , un de mes clients se plaint du manque de flexibilité de la recherche dans prestashop. Nombre de ses clients sont habitués à entrer une partie de la référence pour commander directement leurs produits. Seulement le hic , c'est que la methode find de la classe Search effectue une recherche du type (je shématise) : select produit where name like 'motclef%' Je me dis qu'à cela ne tienne, le vais tweaker la classe pour avoir une requête type select produit where name like '%motclef%' En même temps je me demande pourquoi cela n'a pas été codé comme ça... Ben là voilà que les performances s'effondrent, et que la recherche n'abouti pas parce que la requête ne se termine pas... Le problème vient de l'usage de la clause mysql IN , non adaptée à certains endroits, car suivie d'un select. Mysql y perd ses index et perd les pédale. Je pense que c'est pour celà que le développeur de la classe a limité le like à motclef% . IN est là ou mysql pêche le plus, j'ai pu m'en rendre compte à maintes reprises sur des requêtes complexes. (il y a aussi OR mais dans de moindres mesures...) Le pire intervenant quant on a un ou plusieurs IN (select ....) dans la même requête. J'ai réécrit un bout de code pour que ce IN soit prérenseigné et je peux désormais avoir un like %motclef% . Je n'ai rien perdu en terme de performances, alors je vous livre l'override toute faite à placer dans /overrides/classes de prestashop 1.4 Pour ceux qui voudraient le même résultat sur une 1.3 , copiez simplement la methode(fonction) complete public static function find($id_lang, $expr, $pageNumber = 1, $pageSize = 1, $orderBy = 'position', $orderWay = 'desc', $ajax = false) { ........ } et collez la en lieu et place de la même methode dans /classes/Search.php Pour comparer le résultat allez juste sur votre boutique et rentrez un nom de produit ou une référence tronquée à gauche comme pod au lieu de ipod C'est un premier jet; car je pense que cette classe peut être encore plus optimisée , sans bien sûr lui enlever quelque fonctionnalité que ce soit. Edit: fichier mis à jour le 08/04/2011 , suivant les recommandations de Coeos fichier mis à jour le 09/04/2011 , suite à un malheureux mélange de version %-P NB : fichier override 1.4 uniquement , je préparerais un fichier prémodifié spécifique 1.3 sous peu Search.php Link to comment Share on other sites More sharing options...
Captain FLAM Posted March 23, 2011 Share Posted March 23, 2011 Très bon ça !!Merci. Link to comment Share on other sites More sharing options...
Broceliande Posted April 5, 2011 Author Share Posted April 5, 2011 Ben captain , il faut croire que ça n'intéresse personne à part mes clients et nous deux :s , ou alors j'ai posté ça au mauvais endroit ... Link to comment Share on other sites More sharing options...
Captain FLAM Posted April 5, 2011 Share Posted April 5, 2011 Ben, je pense que les gens n'ont pas bien compris l'intérêt de la chose ...Alors, je fais remonter ce topic !!Na !! Link to comment Share on other sites More sharing options...
jolvil Posted April 5, 2011 Share Posted April 5, 2011 testé OK sur 1.3.7 Link to comment Share on other sites More sharing options...
Broceliande Posted April 5, 2011 Author Share Posted April 5, 2011 testé OK sur 1.3.7 Merci de ton retour jolvil, un de plus au club Link to comment Share on other sites More sharing options...
ckarone Posted April 8, 2011 Share Posted April 8, 2011 Merci pour ce petit hack qui va aider pas mal de clients!!!Edit: Et sur une 1.2.1?Ckarone Link to comment Share on other sites More sharing options...
coeos.pro Posted April 8, 2011 Share Posted April 8, 2011 Bonjour, du bon boulot J'ai juste une petite remarque, tu ne mets pas beaucoup de ` personnellement j'en met toujours autour des noms des champs.Sinon, je viens de tester les différentes requêtes avec mon nouveau module "Ultimate debug" (oui, je sais je me fais un peu de pub, mais bon...) et j'ai pu constater que pour pour la première requête (ligne 27: "$inListResult = $db->ExecuteS('SELECT id_product..." ) on obtenait une liste de id_product, mais ceux ci peuvent être en double : http://i.imm.io/4R4G.png et http://i.imm.io/4R76.jpeg En rajoutant un DISTINCT c'est bon : http://i.imm.io/4R4Q.png et http://i.imm.io/4R7f.pngMerci pour cette optimisation Broceliande.EDIT : dans la version 1.4 ils ont remplacé tous les intval($xxx) par (int)$xxx apparemment c'est 2 à 4 fois plus rapide (entre autre) : http://stackoverflow.com/questions/239136/fastest-way-to-convert-string-to-integer-in-php Link to comment Share on other sites More sharing options...
Broceliande Posted April 8, 2011 Author Share Posted April 8, 2011 Merci coeos de ton test avancé et de ton retour très précis.Tu n'as pas tort pour le `, je zappe assez souvent même si je me force un peu depuis quelques temps. Tout dépend de ce que je suis en train de faire... et du temps que j'ai... mais je vais ajuster ça n'aies craintes .Tu as fort raison de revenir sur ton module, car je suis très tenté de l'essayer (et l'adopter) , c'est même dans ma todo lol.Le cast (int) est en effet plus rapide, intval étant une fonction plus aboutie mais permettant le cast en base nC'est une bonne inspiration qu'ils ont eu la , d'autant que des intval il y en a un paquet dans presta !Pour le distinct, je croyais avoir le groupby kivabien ... il manque peut être dans les pré-requetes, je vais regarder et corriger ça.Merci encore, ça m'encourage à pousser plus loin l'optimisation de cette classe. Link to comment Share on other sites More sharing options...
Broceliande Posted April 8, 2011 Author Share Posted April 8, 2011 Voilà j'ai updaté le fichier dans le post original.J'en ai profité pour faire mumuse avec ultimate debug .C'est pas mal du tout!Notamment le log des requetes. Link to comment Share on other sites More sharing options...
coeos.pro Posted April 9, 2011 Share Posted April 9, 2011 Merci Broceliande, si jamais tu as des idées/recommandations pour améliorer encore un peu cet outil, n'hésite pas Link to comment Share on other sites More sharing options...
Broceliande Posted April 9, 2011 Author Share Posted April 9, 2011 Je n'hésiterais pas ;-) Link to comment Share on other sites More sharing options...
Edern Posted April 9, 2011 Share Posted April 9, 2011 Bonjour,Merci pour cette amelioration appreciable. Je trouve aussi que la recherche PrestaShop est assez limitee. Notamment le fait que seuls les produits sont cherches (et non les categories ou boutiques). Si vous avez des pistes la dessus je suis tres tres preneur !Apres avoir copie le fichier Search.php dans le dossier /override/classes la recherche fonctionne bien avec les mots tronques a gauche. En revanche seul le nombre de resultats s'affiche "1 résultat a été trouvé" et plus de liste en dessous.. du coup c'est moins utile^^ C'est pareil peut importe la recherche, tronquee ou pas.Avez-vous deja eu des retours concernant ce probleme? Est-ce que ca peut etre du a une modification du theme que j'aurai faite? (Je debute dans PrestaShop).Merci d'avance pour votre reponse! Link to comment Share on other sites More sharing options...
Broceliande Posted April 9, 2011 Author Share Posted April 9, 2011 Hmm , j'ai l'impression que j'ai mélangé du code 1.4 et 1.3 , bizarre .La recherche ajax fonctionne parfaitement alors que quand on clique sur le bouton :Unknown column 'p.id_tax' in 'on clause' ...Je vais reprendre çaEn revanche , je n'ai pas de souci type 1 seul résultat dans l'autocompletion (recherche ajax) , bizarre également.Est-ce que ton index est bien construit ? Link to comment Share on other sites More sharing options...
Broceliande Posted April 9, 2011 Author Share Posted April 9, 2011 Post d'origine mis à jour avec une 'vraie' version 1.4 ;-) Link to comment Share on other sites More sharing options...
Edern Posted April 9, 2011 Share Posted April 9, 2011 Genial ca marche! Merci beaucoup pour ta reponse ultra-rapide! Link to comment Share on other sites More sharing options...
Broceliande Posted April 9, 2011 Author Share Posted April 9, 2011 Genial ca marche! Merci beaucoup pour ta reponse ultra-rapide! Merci à toi pour ton retour Link to comment Share on other sites More sharing options...
jolvil Posted April 9, 2011 Share Posted April 9, 2011 J'utilise le code updaté du post [ # 9 ] avec 1.3.7 et je ne vois pas de probleme. Mon bloc recherche est dans ma colonne de gauche. Link to comment Share on other sites More sharing options...
Broceliande Posted April 9, 2011 Author Share Posted April 9, 2011 J'utilise le code updaté du post [ # 9 ] avec 1.3.7 et je ne vois pas de probleme. Mon bloc recherche est dans ma colonne de gauche. Oui oui! mais c'est mea culpa , en fait le code que j'avais posté initialement était celui d'une 1.3.7 . C'est pour cela que ça roule chez toi. Par contre ne 1.4 , autant l'ajax pose no problem, autant lorsqu'on utilise le bouton rechercher, là on avait une erreur... Du coup la classe présente dans le premier post est désormais une 1.4 , il manque la 1.3.7 que tu as déja au final :-) Link to comment Share on other sites More sharing options...
Asenar Posted June 23, 2011 Share Posted June 23, 2011 Tiens, c'est amusant quelqu'un m'a posé exactement la même question sur Skype cet après midi et je lui ai donné exactement la même réponse (l'override, le %, etc. ^^).ça m'a moi aussi étonné que ce ne soit pas de base, j'ai donc proposé qu'on le fasse, on m'a dit "ben oui évidemment" jusqu'à ce que je tombe sur quelqu'un qui m'a dit "ah non surtout pas ! ça tue les perf' car l'indexation est pété". Et évidemment oui, Si l'on a un catalogue un peu conséquent avec des description importantes, le fait d'utiliser la table word_search n'a plus aucun avantage.Je pense qu'il est envisageable de laisser le choix dans la configuration "autoriser la recherche en milieu de mot" en précisant bien que les risques de lenteur sont importants sur un gros catalogue (gros à définir clairement ^^).Edit: J'ai (maintenant) lu complètement le premier message, et donc ma réponse ne fait que confirmer tes soupçons ! Link to comment Share on other sites More sharing options...
Captain FLAM Posted June 24, 2011 Share Posted June 24, 2011 Ben captain , il faut croire que ça n'intéresse personne à part mes clients et nous deux :s Alors, tu vois ! ... j'ai donc proposé qu'on le fasse, on m'a dit "ben oui évidemment" jusqu'à ce que je tombe sur quelqu'un qui m'a dit "ah non surtout pas ! ça tue les perf' car l'indexation est pété". ?? qu'est-ce que cet individu entend par là ? pété ... de rire ? ... ... en précisant bien que les risques de lenteur sont importants sur un gros catalogue (gros à définir clairement ^^) Comme toutes les requêtes ... Comme tu dis : Gros à définir ...Ceci dit, la recherche est une action déclenchée par l'utilisateur : il sera prêt à attendre un chouia ... :roll:Et puis, une recherche qui ne retourne aucun résultat, ça n'est pas très bon !! Link to comment Share on other sites More sharing options...
Asenar Posted June 24, 2011 Share Posted June 24, 2011 (Addendum : faudrait préciser dans ton premier message la version de Prestashop qui va avec ^^ ) Link to comment Share on other sites More sharing options...
nakog Posted July 3, 2011 Share Posted July 3, 2011 Bonjour tout le monde,Edern, as-tu trouvé une solution sur la recherhe par catégorie??j'ai le meme probleme je suis sur la version 1.3.7, je peux seulement faire la recherche par produits et c'est assez embetant.Je cherche depuis des jours une solution en vain, aucuns modules, nada. Je suis donc preneur si vous avez une solution a ce probleme. Merci Link to comment Share on other sites More sharing options...
cavernedutrain Posted August 11, 2011 Share Posted August 11, 2011 Bonjour, j'utilise votre classe. Par contre je constate (version 1.4.4) que certains articles ne sont pas trouvés. Ps: j'avais dejà ce problème avec la classe "standard" Ps2: les produits sont bien indexés Link to comment Share on other sites More sharing options...
villersfr Posted September 4, 2011 Share Posted September 4, 2011 Très bon travail, fonctionne super bien sur 1.4.4 , superbe amélioration très utile ! Link to comment Share on other sites More sharing options...
gravograph Posted September 16, 2011 Share Posted September 16, 2011 Super astuce... Merci Link to comment Share on other sites More sharing options...
djmars Posted September 20, 2011 Share Posted September 20, 2011 Bonjour, Magnifique optimisation ! Avec mes 150 000 produits, mon serveur croule sous les requêtes de recherche des bots... Je suis à la recherche d'une version qui fonctionnerait pour une 1.2.5 ou en tout cas inférieur à 1.4 Auriez-vous le fichier en stock ? Cela m'aiderait bcp et je vous en serait reconnaissant. Link to comment Share on other sites More sharing options...
ehermouet Posted February 6, 2012 Share Posted February 6, 2012 Bonjour merci pour ce fichier et ce développement. Juste une chose, si j'ai bien compris j'ai remplacé la fonction du fichier original par celle du fichier fait par le forum, cependant je ne constate pas de changements dans mes résultats. + notre site fonctionne avec des produits ayant beaucoups de déclinaisons différentes, mais il m'est impossible de retrouver un produits par une référence faisant partie des déclinaisons. Existe t'il une solution ? Merci d'avance Link to comment Share on other sites More sharing options...
ehermouet Posted February 6, 2012 Share Posted February 6, 2012 Afin de clarifié mon besoin voici comment sont faient mes produits j'ai une référence appelé par exe REF--T355 ou les -- sont différents produits de couleurs leurs différentes. donc dans déclinaison j'ai pour un produit Bleu REFBLT355 etc... si je tape dans mon module de recherche REFBLT355 il ne me trouve rien :'(. Merci d'avance pour toute aide. Link to comment Share on other sites More sharing options...
ehermouet Posted February 6, 2012 Share Posted February 6, 2012 je viens de comprendre que sur ma version 1.4.6.2 le search.php est déja le bon, et donc que le problème vient de mes caractères spéciaux -- dans ma recherche ou dans mes réf produits. y a t'il un moyen de contrecarré ça ? + le soucis de recherche dans les déclinaisons ? Link to comment Share on other sites More sharing options...
quickman26 Posted January 12, 2013 Share Posted January 12, 2013 (edited) Bonjour je tourne en 1.4.4.0 et lorsque j installe le fichier, la recherche répond instantanément mais sur une page blanche. De plus l'indexation en back office des produits ne fonctionne pas. Lorsque je supprime ce fichier tout refonctionne, la lenteur de la recherche aussi.. Avez vous rencontré ce problème? Merci de votre aide Edited January 12, 2013 by quickman26 (see edit history) Link to comment Share on other sites More sharing options...
Michel presta Posted February 19, 2013 Share Posted February 19, 2013 (edited) Bravo pour ce post Avec plus de 9000 références....ça aide Toujours rien pour la recherche par catégories??? Edited February 19, 2013 by cigaretteelectronique.pro (see edit history) Link to comment Share on other sites More sharing options...
botmez Posted November 29, 2013 Share Posted November 29, 2013 Bonjour Que faire pour une boutique en 1.3.1 ? Merci Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now