Création d’un plugin Elasticsearch chez Geomatys
Geomatys est une société spécialisée dans le traitement des données spatiales. Dès sa création, la société a fait le choix de maîtriser l’ensemble du framework Java servant de base à la réalisation de Systèmes d’Information Géographique. Convaincue de l'intérêt du respect des standards dans un but d’interopérabilité, la société s’implique pleinement dans les activités de standardisation de l’Information Géographique menées par l’Open Geospatial Consortium et implémente ses solutions en respectant scrupuleusement les normes produites par le TC-211 de l’ISO.
De Constellation-SDI à EXAMIND
Constellation-SDI, projet open source édité par Geomatys, permet la mise en place d’Infrastructures de Données Spatiales (IDS) pour l’acquisition, le traitement et la diffusion de données. Son développement repose sur les piliers fondateurs de notre entreprise : la standardisation et le développement de technologies libres. L’infrastructure propose ainsi la majorité des standards géographiques existants dans un environnement technique Java homogène et maîtrisé.
Depuis les débuts de Constellation en 2008, poussés par l’explosion des volumes de données spatiales hétérogènes, les besoins du domaine de l’information géographique ont connu une croissance exponentielle. C’est pourquoi Geomatys a repensé son application afin de permettre l’exploitation de ces données et proposer des solutions résiliantes et élastiques. A ainsi été créé le projet commercial EXAMIND. Il peut être exploité au sein d’infrastructures de type Infrastructures as a Service (IaaS), de façon à permettre par la suite le développement d’applications SaaS pour des besoins métier spécifiques.
Geomatys propose donc EXAMIND, une offre cloud flexible pour les données géoréférencées, basée sur le projet open source Constellation-SDI. Les données reçues et traitées en temps réel peuvent être de type :
- « Raster » : images satellite, images provenant de drones ou données de modèles météorologiques et océanographiques
- Vectorielles : tirées par exemple du projet Open Street Map, (points, lignes, polygones), tracés à main levée, cadastres ou lignes de niveau
- Issues de capteurs : objets connectés, téléphones mobiles ou balises météo
Indexation de données multidimensionnelles
L’accès rapide aux données représente un point crucial dans ce type d’infrastructure. Elasticsearch répond aux besoins de flexibilité de la plateforme et d’indexation de très gros volumes de données. Il permet l’exploration des données par leur dimension sémantique (métadonnées) et dispose d’un écosystème riche avec des outils de collecte (Logstash) et de visualisation (Kibana) des données.
Cependant, par défaut, Elasticsearch ne propose pas d’index multidimensionnel permettant de chercher à travers de larges volumes de données dans leurs dimensions spatiales et temporelles. Nous avons donc développé un plugin qui nous permet de bénéficier des capacités d’Elasticsearch tout en répondant à nos problématiques spatiales. Ce plugin intègre un index spatial multidimensionnel reposant sur un R-Tree de Hilbert, ainsi que des filtres spatiaux. La recherche est affinée par des critères géographiques évolués.
Dans un premier temps, nous avons utilisé Elasticsearch comme surcouche à Lucene. Le développement basé sur la version 1.x d’Elasticsearch était alors partiellement implémenté, les fonctions spatiales étaient directement intégrées à Lucene et Elasticsearch n’offrait que la fonctionnalité de recherche. L’insertion et l’effacement étaient effectués de manière externe à Elasticsearch. Nous utilisions cependant déjà Logstash et Kibana pour l’exploitation des statistiques d’accès aux données.
Un index R-tree dans Elasticsearch
La recherche géographique a été rendue possible par l’implémentation d’un index R-tree dans Elasticsearch. Ces Index R-Tree se situent au même niveau que les index Lucene dans l’architecture d’Elasticsearch. On y enregistre une ou plusieurs géométries par document (au sens Lucene). On insère seulement les enveloppes des géométries dans l’index R-Tree.
Figure 1: Architecture présentant l'implantation des R-Tree
Un index peut comprendre plusieurs R-Tree, dans le cas où il y a plusieurs champs géométriques. Si aucune des données du shard ne contient le champ géométrique, le R-Tree n’est pas construit. Lors de la réplication des shards, le R-Tree est répliqué en même temps que les données.
La question du développement d’un nouveau plugin de recherche spatiale s’est donc posée. Il existe déjà plusieurs plugins et solutions officielles qui traitent de ce cas. Cependant, il n’existe pas encore de systèmes de coordonnées, ce qui, en géomatique, ne peut s’ignorer, surtout si l’on est limité à des géométries en 2-dimensions. Bien que notre plugin soit, dans sa version actuelle, lui aussi en 2-dimensions, la prochaine étape est le multidimensionnel, déjà supporté par le R-Tree.
Ce R-Tree est défini dans un Coordinate Reference System (CRS). Si elle n’est pas déjà exprimée dans le CRS de l’arbre, chaque géométrie ajoutée à l’arbre doit être reprojetée. Concrètement, le R-Tree va indexer ou ranger des éléments géographiques selon certains critères mathématiques liés, par exemple, à leur situation géographique, leur taille, volume, etc. Ces différents algorithmes, ou critères mathématiques, permettent ainsi de rechercher un ou plusieurs éléments parmi un très grand nombre.
Figure 2 : Représentation graphique d’un index R-Tree (en rouge) avec ses feuilles (en bleu)
Nous avons pu éprouver les capacités de ce plugin lors de son utilisation pour le parcours de la base de données OpenStreetMap qui référence plus de 3 milliards de données géographiques. Nous l’utilisons également sur des catalogues d’images satellite en production, par exemple sur l'Infrastructure de Données Spatiales Geosud.
L’application concrète : Geosud
Geosud est un projet d’envergure nationale qui vise à rendre disponible à la communauté scientifique et aux acteurs publics une couverture satellitaire haute résolution de la France.
Dans ce cas précis, le plugin est utilisé au niveau du moteur de recherche pour les filtres spatiaux et temporels. Il permet aux utilisateurs d'effectuer des recherches par le dessin d’un polygone, d’un cercle sur une carte, ou encore par le chargement de fichiers KML ou Shapefile contenant des géométries complexes. La conception du plugin permet de bénéficier de fonctionnalités spatiales avancées, sans pour autant se couper des fonctionnalités natives fournies par Elasticsearch. Le portail Geosud utilise le plugin pour les filtres spatiaux, combiné avec des fonctionnalités standard proposées par Elasticsearch, telle que :
- Les facettes, dont le vocabulaire est contrôlé par l’utilisation d’un thésaurus sémantique et spatial
- Les mécanismes de « ranking » pour la pertinence de l’ordre des résultats.
- L'auto-complétion à partir de l’index Elasticsearch
- Le « sharding » des index
Figure 3 : Interface de recherche Elasticsearch
Pour le portail Geosud, le plugin est couplé à Logstash et Kibana qui assurent des fonctions de monitoring des recherches et téléchargement de données.
Figure 4 : Tableau de bord Kibana pour le suivi des recherches réalisées
Le tableau de bord Kibana permet de suivre le comportement des utilisateurs lors de leur recherche : mots-clés utilisés, facettes choisies, zones géographiques recherchées… Les statistiques produites servent de feedback pour affiner les facettes ou critères de recherche.
D’autres pistes sont explorées pour les futures évolutions de ce plugin intégré à Constellation comme, par exemple, l’utilisation du plugin avec Hadoop et Spark via le module Elasticsearch for Hadoop. Nous considérons également le nouveau module Graph pour apporter des possibilités en matière de d’analyse structurelle de l’information géographique.
Avertissement : Cet article concerne Elasticsearch avant sa version 5.0 qui introduit depuis des structures de données équivalentes avec Lucene 6.0.
Vincent Heurteaux a, dès le début de sa carrière exercé dans le domaine du SIG, passant successivement sur des problématiques Environnementales et Télécom. En parallèle et depuis 1992, il s'est fortement impliqué dans le domaine de l'open source au sein des mouvances Linux et BSD. C’est tout naturellement qu’en 2005, il a souhaité faire converger ces deux domaines pour s’impliquer dans le développement de technologies SIG Libres et a fondé Geomatys. Depuis, grâce à ses compétences en architecture des Systèmes d’Information et son expérience de créateur d’entreprise, il y conduit le développement stratégique.