menu icon

Assurer la scalabilité d’un moteur de recherche pour des milliers de magasins en ligne – retour sur la conférence ElasticON

Retour sur la présentation Assurer la scalabilité d’un moteur de recherche pour des milliers de magasins en ligne par Roudy Khoury et Aline Paponaud à ElasticON 2023

Assurer la scalabilité d’un moteur de recherche pour des milliers de magasins en ligne – retour sur la conférence ElasticON

Nous avons présenté l’année dernière la version anglaise de ce talk à Berlin Buzzwords. Pour cette année, nous avons participé le 8 mars à la conférence ElasticON Global 2023. A cette occasion, nous avons présenté notre solution de moteur de recherche pour gérer un grand nombre de magasins en ligne. C’était une occasion pour généraliser et mettre à jour la présentation, et aussi partager notre expérience en français.

Les achats en ligne ont été une opportunité pour certains magasins e-commerce pendant la crise du Covid-19. Mais pour presque toutes les entreprises, cela a apporté une multitude de nouveaux défis. Aujourd’hui presque tous les magasins physiques veulent aller en ligne.

En ligne, le moteur de recherche joue un rôle très important dans le succès du magasins e-commerce. Donc il y a des fonctionnalités qui sont attendus du moteur de recherche :

  • Avec la recherche en ligne il faut que l’utilisateur trouve les produits qu’on veut acheter
  • Nous avons besoin d’un système d’autocomplétions pour nous aider à reformuler notre recherche et trouver rapidement ce qu’on cherche
  • Capacité de naviguer sur des rayons
  • Si l’utilisateur ne trouve pas le produit qu’il cherche, le moteur de recherche doit suggérer des produits similaires
  • Si l’utilisateur tape mal un mot, le moteur de recherche doit être intelligent et savoir ce qu’il veut dire (« Voulez-vous dire ? »)

Quand un magasin veut partir en ligne, il va avoir besoin de gérer beaucoup de données. Ces données peuvent être sous plusieurs formes : dans des fichiers, dans une base de données, ou bien obtenu via des streams de différentes sources.

alt text
Platforme du moteur de recherche

Il peut y avoir des niveaux de maturité différents entre les données des magasins, les données peuvent varier d’un magasin à un autre, ils sont hétérogènes et ils viennent de nombreuses sources. Donc il faut construire la plateforme du moteur de recherche au-dessus de ça. Il faut gérer toutes les complexités qui viennent des données, les masquer et les présenter d’une façon propre.

Gérer les index

Pour gérer les données dans Elasticsearch, il y a plusieurs idées. Comme il y a des spécificités pour les offres de chaque magasin, par exemple des promotions qui existe dans un magasin mais pas dans un autre, la première idée qui vient en tête c’est d’avoir un gros index avec tous les données des produits et des offres dedans, et dupliquées par magasins.

alt text
Solution avec un seul index

Ça pourrait être une bonne solution puisque cette approche est compacte, unitaire et dans laquelle le cluster state reste petit, mais il y a aussi une autre idée. On peut créer un index avec les références des produits, c’est-à-dire les données produits qui ne bougent pas entre un magasin et un autre, et puis tous les offres vont aller dans des index séparés par des magasins, un index par magasins Dans ce cas, nous allons avoir un modèle qui ressemble à un modèle de donnée relationnelle.

Cependant, il y a des inconvénients :

  • Une perte au niveau de performance puisqu’il y a trop d’information qui doit être récupérée. Le moteur de recherche doit parcourir des larges modèles de données, et ce qui est spécifique va être joué au moment de la recherche
  • N’importe quelle erreur de configuration va casser la recherche sur tous les magasins. Par exemple si un produit contient des mauvaises infos ça va être répliqué dans les autres magasins
  • Les updates vont être très fréquents sur le même index. Si un magasin veut changer le prix par ex il doit faire l’update sur l’index partagé avec les autres.
  • Dans ce cas il y aussi des join. On n’aime pas ça dans le search !

Ce que nous avons fait pour résoudre ces points, c’est que nous avons mis en place un index par magasins.

alt text
Solution avec plusieurs indexes

Dans l’index magasins, on store tous les produits et toutes les offres pour ce magasin avec la configuration. Dans ce cas, il y a aura des duplications car il y a des éléments communs dans les données pour plusieurs magasins. Puisque nous avons un index par magasin, on peut vraiment faire un fine tuning sur chaque magasin Dans ce cas :

  • Le cluster state va surement augmenter car il y a beaucoup d’index, mais les perfs et le temp de réponse va être le meilleur.
  • Les données seront indépendantes par magasin, donc une meilleure isolation.
  • Moins de mise à jour par index, ils seront répartis sur plusieurs indexes

Maturité et Concurrence

Chaque personne qui a réussi à mettre son magasin en ligne va être en directe compétition avec les big players (Amazon, Rakuten, etc) Le moteur de recherche va pouvoir remonter les produits des magasins et s’il y en a pas, il peut remonter des produits de marketplace. Cela peut être un 3rd party qui met à disposition ses produits avec des options de livraisons. Donc la recherche va inclure les magasins physiques ainsi que la marketplace et l’idée c’est que le moteur de recherche cache ces complexités.

alt text
Volumétrie

Il peut y avoir des milliers de produits des magasins physiques et des millions de produits marketplace. Puisque les produits marketplace ne vont pas avoir des spécificités, nous pouvons les regrouper dans un seul index.

Il reste un problème à résoudre : les produits n’ont pas les même type ou structure de données. Il peut y avoir des produits alimentaires et non alimentaires qui n’ont pas forcément la même structure et champs. Donc, il faut une sorte d’intelligence lors de l’indexation pour mutualiser ça. Pour cela, nous avons proposé un schéma commun pour les données produits. Nous allons préparer nos données en amont avant l’indexation pour avoir une structure bien définie, et de cette façon, la recherche va pouvoir fonctionner sur plusieurs index en même temps, marketplace et magasin.

Pour pouvoir assurer la scalabilité de notre moteur de recherche, il faut quelques points à garantir :

  • Nous sommes dans un monde mobile donc il nous faut un temps de réponse très minime Si l’utilisateur cherche un produit et la recherche met plusieurs secondes pour afficher les résultats, il va probablement aller sur autre chose.
  • Assurer des milliers de mises à jour sur les produits.
  • Gérer plusieurs points d’entrée, pour les applications mobiles, le site, les crawler, etc.
  • Maintenir une sécurité et robustesse du search en isolant les données.

Un quick view sur une telle solution

alt text
Architecture de la solution

  1. Elasticsearch avec sa configuration, les différents mappings des champs et les settings pour chaque index.
  2. Un index qui stock les configuration des magasins ou d’un groupe de magasins
  3. Une business console pour gérer ces configurations : pour appliquer des boosts, des facets, créer des dictionnaires ou tout autre changement à la config.
  4. Un module pour bien optimiser les données des structures définis avant l’indexation

Comme il y a beaucoup d’index dance cas, le cluster state peut devenir grand rapidement. Donc, nous avons besoin d’être sur du multi cluster.

alt text
Architecture des clusters

Nous avons créé plusieurs clusters sur lesquels les indexes sont repartis et on duplique les index communs comme celui de marketplace. Et donc nous aurons besoin d’un router qui va avoir une table contenant l’info sur quel cluster il est chaque magasin.

Des points qu’il faut prendre en considération pour le monitorer le moteur de recherche :

  • Suivre les comportements des utilisateurs du moteur de recherche
  • Quelle sont les termes les plus recherchés ? les filtres les plus appliqués ?
  • Gérer le cas de zéro résultat pour une requête
  • Suivre les click qui on était faite sur la 2eme page ou la position du produit clické, pour booster/debooster ces produits
  • Garder un œil sur les histogrammes de temps de réponse

Pour conclure voici une checklist qu’il faut prendre en considération pour réussir à construire son moteur de recherche e-commerce :

  • C’est très important de s’adapter au magasin physique et ces spécifiques
  • Utiliser un schéma pour travailler sur des larges jeux de données provenant de différentes sources
  • Le temps de réponse n’est pas négociable, et il doit être optimisé en utilisant une bonne approche pour l’indexation
  • C’est important d’apprendre en surveillant le système et préparer la scalabilité en amont
  • Et finalement la sécurité, pas que la protection contre les hackers, mais aussi en terme d’isolation de données pour empêcher la diffusion d’erreurs ou de corruption des index

Question answering, une approche plus humaine à nos recherches sur all.site.

19/01/2023

Tout sur les Question-Answering et comment l'implémenter en utilisant flask et elasticsearch.

Lire l'article

Retour d’Expérience - Fine-tuning d’un modèle VOSK

05/01/2022

all.site est un moteur de recherche collaboratif. Il fonctionne comme Bing ou Google mais il a l’avantage de pouvoir aller plus loin en indexant par exemple les contenus média et en organisant les données de systèmes comme Slack, Confluence ou l’ensemble des informations présentes dans l’intranet d’une entreprise.

Lire l'article

Retour d’Expérience - Indexation des transcriptions de fichiers média

17/12/2021

all.site est un moteur de recherche collaboratif. Il fonctionne comme Bing ou Google mais il a l’avantage de pouvoir aller plus loin en indexant par exemple les contenus média et en organisant les données de systèmes comme Slack, Confluence ou l’ensemble des informations présentes dans l’intranet d’une entreprise.

Lire l'article

La revue de presse du 25 Novembre 2021

25/11/2021

Bientôt le weekend, bientôt l'hiver, alors une petite revue de presse pour occuper vos longues soirées...

Lire l'article

Nouveau meetup Search & Data - E-Commerce Search et Open Source

28/10/2021

La cinquième édition du meetup Search and Data est dédiée au search e-commerce et à l'open source. Un bel agenda pour cette édition de rentrée et de reprise.

Lire l'article

Expédition vers Synonym Graph dans Elasticsearch

21/04/2021

Dans cet article, nous expliquons comment nous sommes passés des anciens filtres de synonymes d'Elasticsearch aux nouveaux filtres de type graphe, les Synonym Graph Token Filter.

Lire l'article

Quand les requêtes sont très verbeuses

22/02/2021

Dans cet article, nous présentons une méthode simple pour réécrire les requêtes utilisateurs afin qu'un moteur de recherche basé sur des mots clés puisse mieux les comprendre. Cette méthode est très utile dans le contexte d'une recherche vocale ou une conversation avec un chatbot, contexte dans lequel les requêtes utilisateur sont généralement plus verbeuses.

Lire l'article

Enrichir les données et réécrire les requêtes avec le percolator Elasticsearch

26/04/2019

Cet article est une transcription de notre intervention cette semaine à Haystack - une conférence sur l'amélioration de la pertinence des moteurs de recherche. Nous avons montré une méthode permettant d'enrichir et de réécrire les requêtes des utilisateurs en utilisant Wikidata et le percolator Elasticsearch.

Lire l'article

A2 le moteur qui sublime Elasticsearch

13/06/2018

Elasticsearch est une technologie ouverte qui permet aux intégrateurs de construire des solutions toujours plus innovantes et puissantes.

Lire l'article