Lucene - 10 ans d'usages plus ou moins classiques

  • 677 views
Uploaded on

Retour d'expérience sur 4 projets utilisant Lucene dans des contextes très différents : recherche documentaire, ecommerce, moteur de pub et matching d'affinités musicales

Retour d'expérience sur 4 projets utilisant Lucene dans des contextes très différents : recherche documentaire, ecommerce, moteur de pub et matching d'affinités musicales

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
677
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. LUCENE ET MOTEURS DE RECHERCHE 10 ANS D’USAGES PLUS OU MOINS CLASSIQUES Toulouse JUG – 27 juin 2013
  • 2. Le programme ¤  Deux usages classiques n  Documentation avion Airbus (2003) n  Marketplace Cdiscount (2013) ¤  Deux usages moins classiques n  Moteur de publicité pour de la TV sur IP n  Matching d’affinité musicale pour un site de rencontre
  • 3. A propos… ¨  Sylvain Wallez ¤  Architecte et dev expert freelance, web & Java ¤  2008-2010 : CTO de Goojet/Scoop.it ¤  2006-2008 : Backend architect Joost ¤  2000-2008 : cofondateur & CTO Anyware Technologies ¤  2003 : premier VP français de la fondation Apache sylvain@bluxte.net http://bluxte.net Twitter: @bluxte
  • 4. Premier contact : 2003 Documentation avion Airbus
  • 5. Documentation avion Airbus ¨  Données : des centaines de PDF ¨  Entrée : du texte ¨  Sortie : ¤  Référence du document ¤  N° de page ¤  N° d’alinea !
  • 6. Documentation avion Airbus ¨  Données : des centaines de PDF ¨  Entrée : du texte ¨  Sortie : ¤  Référence du document ¤  N° de page ¤  N° d’alinea !
  • 7. Documentation avion Airbus ¨  Bon, ok, on va analyser le PDF… ¤  Chance : structure du doc régulière, police fixe ! ¤  Librairie Etymon PJ : un « DOM » pour le PDF Doc Page Ligne Texte CNATRA 2 1 If decision to evacuate is made… CNATRA 2 2 If directed by CNATRA, execut… CNATRA 2 3 COR II (Winds in excess of 50… CNATRA 2 4 Send decision to Evacuate e-m… CNATRA 2 5 Terminate all syllabus and cros… CNATRA 2 6 When directed by CNATRA, ex…
  • 8. Construire un index ¨  Le travail du « search engine builder » ¤  80% extraire et formater la donnée ¤  10% définition du schéma d’indexation ¤  10% expression des requêtes
  • 9. Construire un index ¨  Le schéma : bien plus que du typage Doc Page Ligne Texte CNATRA 2 1 If decision to evacuate is made… CNATRA 2 2 If directed by CNATRA, execut… CNATRA 2 3 COR II (Winds in excess of 50… CNATRA 2 4 Send decision to Evacuate e-m… CNATRA 2 5 Terminate all syllabus and cros… CNATRA 2 6 When directed by CNATRA, ex… Indexé : non Stocké : oui Indexé : tokens, stemming, stop words Stocké : non Indexé : non Stocké : oui Indexé : non Stocké : oui
  • 10. Fast forward à 2013 ! Middle office Cdiscount
  • 11. Middle office Cdiscount ¨  Marketplace : ¤  7 millions de produits (+40k chaque mois) ¤  5.000 vendeurs ¤  4 millions d’offres ¨  Objectifs : ¤  Recherche dans le catalogue produit ¤  Recherche et comparaison des offres ¤  … avec des autorisations par vendeur ¤  Cluster de serveurs Solr
  • 12. Middle office Cdiscount ¨  Données : des dizaines de tables SQL Server ¨  Entrée : ¨  Sortie : { "OfferId":3666756, "SellerId":"2087", "ProductId":"RAI3295190015218", "ProductEan":"3295190015218", "SellerProductId":"335191200", "OfferState":2, "ProductState":1, "ProductConditionId":6, "Price":15.92, "BestShippingCharges":9.95, "BestOfferId":2885830, "BestOfferPrice":22.44, "BestOfferShippingCharges":0.0, "BestOfferConditionId":6, "LastUpdateDate":"2013-03-05T11:55:23.867Z", "RemainingQuantity":150, "DisplayName":"Chemises Rock's assorties par 100", "ShortDescription":"Chemises Rock's assorties par 100 - Teintes vives.", "ProductUrl":"/au-quotidien/papeterie/f-127051001-RAI3295190015218.html” }
  • 13. Modélisation ☒ ☒ "OfferId":3666756, ☒ ☒ "SellerId":"2087", ☒ ☒ "ProductId":"RAI3295190015218", ☒ ☒ "ProductEan":"3295190015218", ☒ ☒ "SellerProductId":"335191200", ☒ ☒ "OfferState":2, ☐ ☒ "ProductState":1, ☐ ☒ "ProductConditionId":6, ☒ ☒ "Price":15.92, ☐ ☒ "BestShippingCharges":9.95, ☐ ☒ "BestOfferId":2885830, ☒ ☒ "BestOfferPrice":22.44, ☐ ☒ "BestOfferShippingCharges":0.0, ☐ ☒ "BestOfferConditionId":6, ☒ ☒ "LastUpdateDate":"2013-03-05T11:55:23.867Z", ☐ ☒ "RemainingQuantity":150, ☒ ☒ "DisplayName":"Chemises Rock's assorties par 100", ☒ ☒ "ShortDescription":"Chemises Rock's assorties par 100...", ☐ ☒ "ProductUrl":"/au-quotidien/papeterie/f-127051001-...” Indexé Stocké
  • 14. Modélisation ¨  Champs indexés à Pondération différente dans le scoring ¨  Pourquoi autant de champs stockés ? à Eviter les requêtes en base pour l’affichage des résultats ! ProductEan OR ProductId OR DisplayName OR ShortDescription^0.5
  • 15. Modélisation ¨  Autorisations d’accès : 2000 catégories/vendeur ¤  Ajouter 2000 critères n’est pas réaliste… ¨  Utilisation des « Query Filter » Lucene ¤  Une liste d’identifiants de documents précalculée ¤  Sert de « masque » lors de la recherche à Limitation à un sous-espace des données
  • 16. Mise à jour des données ¨  Polling périodique des bases de données à Obtention d’un « delta » à indexer ¤  Data Import Handler dans Solr ¤  River dans Elasticsearch ¤  … mais on finit souvent avec une solution custom
  • 17. 2006 : look Ma, I’m on (IP) TV ! Ad engine pour Joost
  • 18. Joost : TV/IP par les Skype-boys
  • 19. Ad engine pour la TV ¨  Données : campagnes de pub ¤  Pays, jours de la semaine, plages horaires ¤  Chaînes, types de contenu ¤  Dates de début/fin, nombre d’impressions cibles ¨  Entrée : contexte utilisateur ¤  Pays, heure locale, chaîne, contenu, historique ¨  Sortie : une pub à afficher
  • 20. Modélisation ¨  Champs « classiques » ¤  Pays, chaîne, contenu ¨  Créneaux horaires ¤  Discrétisation en « tokens » de 15 minutes à Renforce la pertinence des plages courtes ¨  Query ??? ¤  L’utilisateur et son contexte sont la query !
  • 21. Scoring ¨  Ajout d’un facteur de scoring temps réel ¤  Mix pertinence + nombre d’impressions à Régulation naturelle des impressions progress = (now - timeStart) / (timeEnd – timeStart) expectedImpressions = maxImpressions * progress rate = expectedImpressions / currentImpressions score = matchScore * rate Score Lucene Compteur temps réel
  • 22. Joost : bilan ¨  Utilisation « créative » de Lucene ¨  Cœur du moteur : quelques centaines de LoC ¨  Extrêmement performant ¨  Pas mal de paramètres à régler
  • 23. 2011 : Lucene cherche l’amour… en musique T’Ecoutes Quoi ?
  • 24. Rencontres par affinité musicale
  • 25. Rencontres par affinité musicale
  • 26. Le problème ¨  Données : ¤  Profil Facebook : nom, sexe, ville, likes d’artistes ¤  Meta-données sur les artistes : genres, artistes similaires, popularité ¨  Entrée : profil utilisateur + critères ¨  Résultats : ¤  liste de profils avec « température »
  • 27. Modélisation ¨  Données de profil ¤  Age, date de naissance, localisation ¤  Liste d’artistes « likés » ¨  Données déduites ¤  Genres des artistes ¤  Artistes similaires ¨  Préférences ¤  Genre et âge des personnes recherchées
  • 28. Requête composite ¨  Filtrage booléen : choix de l’utilisateur ¤  Sexe, âge ¨  Critères de scoring ¤  Similarité des goûts musicaux n  Intersection des artistes n  Intersection des genres ¤  Plage d’âge compatible ¤  Distance géographique
  • 29. Conclusion
  • 30. Un couteau suisse ¨  Full text search ¤  Complexité : agrégation et formatage des données ¨  Moteur de matching « flou » ¤  Usages très nombreux, développement rapide et résultats pertinents ¤  Soyez créatifs !
  • 31. Lucene, Solr ou Elasticsearch ? ¨  Lucene : brique de base ¤  Moins simple à mettre en œuvre ¤  Mais donne accès à toutes les « power features » ¤  Connaître ses concepts pour maîtriser ES ou Solr ! ¨  Elasticsearch ¤  Taillé pour le clustering ! ¤  Moins de features que Solr ¨  Solr ¤  Clustering plus « lourd » ¤  Ultra-customizable
  • 32. De la lecture !
  • 33. Merci ! Questions ? Réponses !