{"id":339,"date":"2018-09-24T11:12:32","date_gmt":"2018-09-24T10:12:32","guid":{"rendered":"http:\/\/www.jacquescortes.fr\/blog\/?p=339"},"modified":"2018-09-24T11:38:33","modified_gmt":"2018-09-24T10:38:33","slug":"recherche-avancee-dans-application-legacy","status":"publish","type":"post","link":"https:\/\/www.jacquescortes.fr\/blog\/2018\/09\/recherche-avancee-dans-application-legacy\/","title":{"rendered":"Fonctionnalit\u00e9s de recherche avanc\u00e9e dans les applications existantes (legacy)"},"content":{"rendered":"<h1>Recherche avanc\u00e9e<\/h1>\n<p>L&rsquo;\u00e9vang\u00e9liste David Pilato de la soci\u00e9t\u00e9 Elastic, via sa pr\u00e9sentation\u00a0tr\u00e8s bien faite, nous d\u00e9montre rapidement les avantages \u00e0 ajouter des fonctionnalit\u00e9s de recherche avanc\u00e9e dans les applications legacy (vid\u00e9o \u00e0 la fin de l&rsquo;article).<\/p>\n<p>C&rsquo;est \u00e0 dire, dans les SI (syst\u00e8me d&rsquo;information) des grandes entreprises, on a souvent de tr\u00e8s nombreuses applications qui fonctionnent bien et que l&rsquo;on ne compte pas refaire compl\u00e8tement.<br \/>\nPar contre, il est possible grace \u00e0 des technologies qui n&rsquo;avaient pas \u00e9t\u00e9 mise en oeuvre au d\u00e9part, d&rsquo;ajouter des fonctionnalit\u00e9s int\u00e9ressantes pour les utilisateurs, les \u00ab\u00a0m\u00e9tiers\u00a0\u00bb.<br \/>\nParmi ces technologies, on va voir le gain apport\u00e9 par l&rsquo;ajout d&rsquo;un moteur d&rsquo;indexation comme Elasticsearch ou Solr notamment, sans recoder l&rsquo;application enti\u00e8rement et sans se s\u00e9parer des bases de donn\u00e9es historiques.<\/p>\n<p>Il ne s&rsquo;agit pas de basculer dans le NoSQL. Dans sa d\u00e9mo, David ajoute Elasticsearch sur une application Java \/ Hibernate \/ BDD classique (MySQL).<br \/>\nIl ne change pas l&rsquo;architecture, rajoute juste l&rsquo;indexation des donn\u00e9es lors des inserts et des updates sur la BDD, puis reroute les recherches sur le moteur d&rsquo;indexation.<\/p>\n<p>Premi\u00e8re question : Y a-t-il une perte de performance?<br \/>\n&#8211; en lecture (recherche), bien au contraire, c&rsquo;est plus performant et avec des fonctionnalit\u00e9s avanc\u00e9es<br \/>\n&#8211; en \u00e9criture (insert et update), pratiquement pas grace au client bulk qui bufferise les indexations par paquet et qui flush automatiquement au bout d&rsquo;un certains d\u00e9lai.<\/p>\n<p>Concr\u00e8tement, on ajoute une librairie (d\u00e9pendance Maven), quelques lignes de java et un cluster Elasticsearch \u00e0 c\u00f4t\u00e9.<\/p>\n<p>C\u00f4t\u00e9 IHM, on peut passer d&rsquo;une recherche multi-champs \u00e0 une recherche avec un champ unique fa\u00e7on \u00ab\u00a0Google\u00a0\u00bb.<br \/>\nOn ajoute la recherche approchante, \u00e0 une lettre pr\u00e8s, phon\u00e9tique, etc&#8230;<br \/>\nLe plus gros changement, c&rsquo;est que le r\u00e9sultat est tri\u00e9 par pertinence.<br \/>\nLe moteur donne des scores de pertinence \u00e0 chaque r\u00e9sultat et pr\u00e9sente en premier ce qu&rsquo;il pense \u00eatre le plus pertinent.<br \/>\nCela implique que le moteur ne retourne plus juste les r\u00e9sultats qui correspondent strictement \u00e0 la recherche, mais bien tout ce qui est approchant mais tri\u00e9 par pertinence.<\/p>\n<p>L&rsquo;exemple classique c&rsquo;est la recherche de produits dans un catalogue.<br \/>\nSi je cherche avec la r\u00e9f\u00e9rence num\u00e9rique, le moteur va me sortir la fiche produit exacte.<br \/>\nSi je cherche avec le nom du produit, le moteur va me sortir en priorit\u00e9 les produits qui ont ces termes dans le titre de la fiche. Mais aussi, en second r\u00e9sultat, ceux qui ont ces termes dans la descriptions.<br \/>\nPour ce faire simplement, il faut pr\u00e9ciser dans le moteur un poids de pertinence d\u00e9croissant sur les champs r\u00e9f\u00e9rence puis titre puis description.<\/p>\n<p>Comme on le voit dans la d\u00e9mo, David nous montre un autre crit\u00e8re qui joue sur le classement de pertinence.<br \/>\nAvec sa recherche sur le pr\u00e9nom \u00ab\u00a0France\u00a0\u00bb, France Gall sort en premier devant tous les contacts qui habitent en France car le pr\u00e9nom France est plus rare que les adresses en France.<\/p>\n<p>Voil\u00e0, je ne vous raconte pas toute la d\u00e9mo, elle vaut le coup d&rsquo;\u00eatre visionn\u00e9e, elle montre aussi un d\u00e9but de <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Recherche_%C3%A0_facettes\">recherche facett\u00e9e<\/a>\u00a0(faceted search \/ aggregation) pour aller encore plus loin&#8230;<br \/>\nEt en cherchant, j&rsquo;en ai trouv\u00e9 une deuxi\u00e8me version o\u00f9 David ne montre pas tout \u00e0 fait les m\u00eame choses.<br \/>\nJe vous mets les 2 versions ci-dessous.<\/p>\n<h2>Codemotion 2018,\u00a0Amsterdam<\/h2>\n<p><iframe loading=\"lazy\" width=\"1170\" height=\"658\" src=\"https:\/\/www.youtube.com\/embed\/QfWdYTzA9rs?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n<h2>JUG.ru, Joker\u00a02016,\u00a0Saint Petersburg<\/h2>\n<p><iframe loading=\"lazy\" width=\"1170\" height=\"658\" src=\"https:\/\/www.youtube.com\/embed\/sidqRZyywP4?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Recherche avanc\u00e9e L&rsquo;\u00e9vang\u00e9liste David Pilato de la soci\u00e9t\u00e9 Elastic, via sa pr\u00e9sentation\u00a0tr\u00e8s bien faite, nous d\u00e9montre rapidement les avantages \u00e0 ajouter des fonctionnalit\u00e9s de recherche avanc\u00e9e dans les applications legacy (vid\u00e9o \u00e0 la fin de l&rsquo;article). C&rsquo;est \u00e0 dire, dans les SI (syst\u00e8me d&rsquo;information) des grandes entreprises, on a souvent de tr\u00e8s nombreuses applications qui [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":351,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,7,5],"tags":[],"series":[],"class_list":{"0":"post-339","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-advanced-search","8":"category-elasticsearch","9":"category-indexation","10":"czr-hentry"},"_links":{"self":[{"href":"https:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/posts\/339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/comments?post=339"}],"version-history":[{"count":8,"href":"https:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/posts\/339\/revisions"}],"predecessor-version":[{"id":349,"href":"https:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/posts\/339\/revisions\/349"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/media\/351"}],"wp:attachment":[{"href":"https:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/media?parent=339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/categories?post=339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/tags?post=339"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/www.jacquescortes.fr\/blog\/wp-json\/wp\/v2\/series?post=339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}