Comment rendre un moteur de recherche rapide ?
On me demande souvent comment faire pour rendre un moteur de recherche plus rapide - à ne pas confondre avec plus pertinent.
Dans les prochaines lignes, je vais tenter de vous proposer 3 axes d’améliorations pour vos projets de moteurs de recherche.
La nature de votre moteur
Tout d’abord, il vous faut regarder la nature de votre moteur de recherche. Comment est-il été développé ?
Il existe plusieurs façons d’implémenter un moteur de recherche dans un projet Web :
- Base de données : votre moteur de recherche repose sur vos données “brutes” et des requêtes sont effectuées directement sur cette base de données.
- Moteur d’indexation : vos données brutes sont transformées, analysées et stockées dans un outil dédié à la recherche (Solr, Elasticsearch…).
Un moteur de recherche se basant uniquement sur une base de données reste fonctionnel en soi, mais engendre un très grand nombre de contraintes :
- L’accès aux données dans une base de données très volumineuse peut-être lente, voire très lente.
- Plus le nombre de filtres augmente, plus la requête sera lente.
- Les recherches textuelles sont pour ainsi dire inutiles puisque la pertinence de la recherche textuelle est très limitée.
- Une base de données n’est pas faite pour effectuer des recherches complexes. Elle ne sera pas capable de gérer un système de synonymes, de translittérations (recherche textuelle intelligente comprenant que la lettre é = e).
- La mise en place d’un système en Facets est contre-performant (et très coûteux) sur une infrastructure en base de données.
Utiliser un outil d’indexation est la manière la plus judicieuse d’implémenter un moteur de recherche. Les outils d’indexations sont développés dans cette optique et exposent un très grand nombre de fonctionnalités “out of the box” :
- Translittération, Stopwords…
- Compréhension de texte (selon les langues définies)
- Analyse de texte, de distanciation des mots
- Pondération des résultats
Les outils d’indexation tels que Solr ou Elasticsearch sont capables d’analyser les filtres et la recherche demandée, ce n’est pas un simple matching. Tout un système d’analyse, de processeurs et de pondération est mis en place afin de rendre des résultats plus pertinents et beaucoup plus rapidement.
En bref, les moteurs d’indexation sont beaucoup plus performants qu’une base de données. Il est possible de facilement monter en charge et les performances restent inchangées, là où un moteur de base de données classique peinerait grandement.
Stratégie de mise en cache
Une stratégie de cache peut-être intéressante lorsque certaines combinaisons de filtres sont très fréquentes. Il est possible de définir des combinaisons à mettre en cache.
Un exemple étant plus parlant, voyons cela avec une recherche immobilière. Sur un moteur, il est intéressant de mettre en cache les recherches très récurrentes. La mise en place d’une stratégie de cache uniquement sur les résultats des filtres ville = Genève et pièces = 3.5+ permet de soulager le moteur d’indexation.
Afin de mettre en place une stratégie de cache exclusive, il faut évidemment effectuer une analyse des recherches existantes et définir cette stratégie en amont.
Caching warm-up
Le Warm-Up permet de “chauffer le cache”, en effectuant les requêtes cacheable en amont pour les utilisateurs.
Il faut savoir qu’une mise en cache des données peut avoir des impacts sur le cycle de la requête (accès serveur, écriture de l’entrée de cache…). La création du cache n’est pas anodine. Il peut-être intéressant de crée celui-ci avant la première requête utilisateur.
Avec le caching Warm-Up, il est possible d’éviter la création du cache “On-Demand”, en préchauffant le cache des pages lourdes ou fréquemment visitées.
Le Caching Warm-up doit être mis en place uniquement lorsqu’une stratégie de cache est déjà en place. Le Warm-Up doit être lancé à chaque nouveau déploiement ou lorsque l’ensemble des caches est vidé.
Conclusion
Vous l’aurez compris , il n’existe malheureusement pas de méthode magique pour rendre un moteur de recherche rapide. Lorsqu’un moteur de recherche est lent c’est que son implémentation technique souffre de lacunes plus ou moins importantes.
Je plébiscite la mise en place d’un moteur d’indexation dédié. Spécifiquement dans le cas où vous avez besoin d’un contrôle complet sur le moteur de recherche ou lorsque le moteur de recherche est une fonctionnalité centrale du projet.
Dans le cas où votre moteur de recherche souffre de lenteur ou d’une mise en place “legacy” (implémentation base de données par exemple), une bonne stratégie de caching et du caching warm-up va drastiquement améliorer l’expérience des utilisateurs.