Donc voilà ma problématique :
Une base de données moyenne 80000 enregistrements par table (enfin ça commence à faire aussi un peu) et réaliser un moteur de recherche sur les libellés.
J’ai naturellement voulu chercher un plugin voulant gérer ceci et je suis tombé sur ferret et acts_as_ferret. Seulement voilà, Ferret fonctionnait bien mais n’était pas trés rapide … et en plus, comme j’avais des jointures, une fois mes éléments retournés, je devais faire des requêtes sur tous les résultats … une perte de temps !
Je me suis enfin tourné sur la recherche FULL TEXT de MySQL. Et là tout fonctionnait vraiment bien et très rapidement … mais … et il y a un « mais »… les requêtes géraient mal les recherches sur les mots avec des accents !
Finalement, je suis resté sur la version MySQL en utilisant la fonction find_by_sql de mon objet ActiveRecord. Tout ce que j’ai eu à faire et de créer un champ dans ma table nommée « search » dans lequel je duplique l’intitulé en y enlevant les accents !
Etrangement dans la recherche FULL TEXT de MySQL lorsque l’on recherche dans des chaines avec des mots qui contiennent des accents cela ne fonctionne pas très bien ! Voici un exemple :
La phrase suivante se trouvant dans la base de donné : « J’aime coder devant la télé »
La recherche avec le mot clef « télé » nous sort bien cette phrase.
La recherche avec le mot clef « tele » échoue lamentablement !
Moralité, j’ai donc créé un champ search avec mes intitulé sans accent, et je transforme mes mots clefs en enlevant les accents également… Voici le schémas
intitule = « J’aime coder devant la télé »
search = « J’aime coder devant la tele »
mot clef = « télé » ou « tele » ou « têlè », etc … sera transformé par « tele » et retournera l’enregistrement souhaité.
L’avantage est que les requêtes (même avec des jointures) sont trés rapides ! Alors pourquoi s’en passer ? ActiveRecord est sympas pour 90% des cas… mais des fois une bonne requête SQL ne fait pas de mal surtout quand le gain de performance est notable !
Voilà, donc si vous avez des soucis de recherche FULL TEXT avec les accents, voici une petite astuce pour s’en affranchir !
Recent Comments