Jump to content

Recherche sur un terme exact (avec guillemets p.ex)


Recommended Posts

Bonjour,

 

La recherche de prestahop permet de rechercher des termes comportant plusieurs mots en les associant avec une condition "AND". 

 

Est-il possible de pousser un peu plus loin cette fonctionnalités en recherchant le terme saisi à l'identique en évitant qu'il cherche les mots dissociés les un des autres (comme on le ferait sur google avec des guillemets pour garantir que les mots se suivent dans l'ordre qu'on les a saisis") ?

 

Merci d'avance pour vos lumières !

 

Excellente journée.

 

Link to comment
Share on other sites

Bon matin,

 

La solution n'est pas simple, elle demande un override sur la classe "search.php", sur la méthode "find" pour être précis.  Il faudrait éviter que "$words" prenne les mots, et qu'il défasse le String de manière à isoler les mots entouré de guillement avant de faire son code.

 

Martin

Link to comment
Share on other sites

Alors j'en suis parvenu à la même conclusion et j'ai remplacé cette ligne : 

 

$words = explode(' ', Search::sanitize($expr, $id_lang));
 

Par celle ci : 

$words = array(Search::sanitize($expr, $id_lang));

En dur, juste pour voir ce qui se passait.

 

Sauf que là, aucun résultat n'est retourné, je me suis donc dit que c'était plus compliqué que ça , ce qui  m'amène ici. 

 

J'ai également repéré à plusieurs endroits une contrainte sur la longueur du terme, que j'ai supprimé, là aussi pour voir ce que ça donnait. Mais pas mieux. 

Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)

Merci quand même pour ta réponse.

Edited by SamXIV (see edit history)
Link to comment
Share on other sites

Le code est quand même assez complexe, il faudrait faire du Regex (Regular Expression) pour arriver à un bon résultat (Du moins après analyse sommaire et à ma connaissance).

 

Le problème (Vu d'un puriste (moi)) c'est qu'on parle de "LIKE" ici, "LIKE" est l'une des commandes les plus gourmand point de vue performance. Nous sommes en plus en schéma relationnel et non en étoile, ce qui rend la recherche plus complexe vu le nombre de liaison (Jointure) nécessaire. Le tout en MySQL, on ne parle pas de Google ici (Nosql / hbase) qui est axé vers la recherche.

 

Mais je considère tout de même la fonctionnalité intéressante et possible dans un contexte de performance, je ne crois pas le script assez gourmand pour donner une performance en haut de 3 secondes, quoique le tout dépend du nombre d'enregistrements.

 

Martin

Link to comment
Share on other sites

  • 3 years later...
  • 2 years later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...