Devoxx 2016 – Les confs Elasticsearch
Une journée à Devoxx, et de belles découvertes.
Je vais me concentrer sur Lucene et Elasticsearch dans ce billet.
J’ai assisté à deux conférences sur ces sujets, l’une plutôt théorique, l’autre plutôt pratique.
La théorie d’abord. La magie des structures d’Elasticsearch et de Lucene, expliquée par Florent Ramière.
Une bonne introduction pour comprendre pourquoi Lucene est capable de rechercher si vite dans des millions de documents.
Florent Ramière a d’abord fait un rappel sur la notion d’annuaire inversé. Chaque mot a un identifiant dans l’index. A cet identifiant sont liés les identifiants des documents contenant le mot.
Cette correspondance permet de retrouver rapidement les documents contenant les mots de la recherche : on n’a pas besoin de parcourir chaque document de l’index pour tester s’il correspond aux mots recherchés.
Lucene est bâti sur ce principe de base. Les moteurs de recherche Solr et Elasticsearch en bénéficient.
C’est le principe utilisé par les index d’un SGBD; ici il est au coeur du système de stockage. De plus, les entrées sont triées pour être plus rapidement retrouvées lors d’une recherche.
Après ce principe de base, les autres idées fortes de Lucene étaient exposées. Un bon point de départ pour comprendre le succès de la librairie.
Ici, deux objectifs : réduire la taille des index, et les construire en visant l’efficacité des recherches.
Le stockage se fait en segments. Les fichiers d’un segment ne sont jamais modifiés, ce qui évite les problèmes de lock. A chaque insertion, un nouveau segment. Et des merges pour optimiser les index.
Diverses techniques pour réduire la taille des index et optimiser les recherches étaient exposées :
– chaque document ayant un identifiant, chaque terme également, Lucene traite des tableaux d’entiers. Ordonnés et de taille fixe.
– le delta-encoding, c’est-à-dire la possibilité d’enregistrer les différences entre des entiers plutôt que les entiers eux-mêmes pour gagner de la place (penser à une fourchette de prix par exemple)
– le bit-packing, n’utiliser que les bits nécessaires pour stocker un tableau d’entiers
La conférence se basait sur les présentations d’Adrien Grand, ingénieur chez Elastic, et committer sur Lucene.
Deuxième conférence liée à Elasticsearch : Elasticsearch et Hibernate sont sur un bateau.
Très bonne conf, avec les explications d’un côté et des exemples concrets tournant sur l’IDE et projetés sur le grand écran de l’amphi.
Cette fois on est dans la pratique. Le but de la conf était de présenter la dernière évolution d’Hibernate Search pour Elastic, en version 5.6.0 alpha.
Emmanuel Bernard et David Pilato ont introduit de bonnes questions et y ont répondu sur des exemples.
Des questions qu’on se pose souvent quand on intègre les données d’une base dans un moteur de recherche :
– comment détecter qu’une entité db doit être mise à jour dans l’index du moteur de recherche
– comment gérer les modifications du schéma de base de données dans le schéma de l’index
– comment faire si un document retrouvé dans l’index n’est pas à jour par rapport à la base de données
La version alpha d’Hibernate Search n’est pas encore prête pour la production. Mais déjà elle permet de lier les fonctionnalités d’Hibernate Search à un cluster Elastic distant, pour séparer les services, et bénéficier de la scalabilité d’Elastic. Il faudra encore déclarer le format de l’index Elasticsearch séparément des entités db, mais d’autres versions suivront !
Et la société Elastic, sponsor de cette édition de Devoxx, avait son stand pour approfondir tout ça.
Bref, des connaissances sur Lucene à indexer… Avec les entrailles de Git et du bytecode java, ou l’architecture parisienne comparée à REST, un Devoxx bien rempli.