Razvan Vatafu
INSA TC
Published in
4 min readOct 7, 2016

--

Comme son nom l’indique, Elasticsearch est un serveur de recherche. Cette technologie est basée sur Apache Lucene, une librairie de recherche et d’indexation du texte, écrite en Java.

Elasticsearch est un système distribué open source qui est accessible depuis l’interface web RESTful et qui utilise JSON (JavaScript Object Notation). C’est également un outil qui permet de stocker les documents sans schéma (Schema less)

Avantages

Elasticsearch supporte sans problème des volumes de données importants. Cet outil peut traiter des petabytes de données structurées ou non.

Exemple Netflix

Elasticsearch utilise la « dénormalization » qui consiste à répliquer les données pour améliorer les performances. De nombreux indexes sont par ailleurs créés pour aller plus vite : par exemple Elasticsearch va stocker la liste de documents qui contiennent un mot particulier.

Elasticsearch est open source.

Elasticsearch a gagné la confiance des géants du web comme Facebook, Netflix, Wikipedia ou encore GitHub.

Elasticsearch est capable de travailler en temps réel. Il n’y a pas de temps de latence entre le stockage dans la base de données et l’accessibilité par une requête.

Elasticsearch a nativement la technologie qui permet de répliquer la base de données sur plusieurs nœuds. Ce qui permet d’être résistant à des éventuels pannes de serveurs.

Inconvénients

Elasticsearch travaille uniquement avec JSON et n’est donc pas compatible directement avec les formats de données CSV et XML: il faut une préphase de transformation vers JSON.

Utilisation

Elasticsearch est plus performant en utilisant des données structurées.

La terminologie en ElasticSearch

Avant de montrer quelques requêtes, il est important de faire un point sur la terminologie utilisée. Afin d’être compris par le plus grand nombre on va faire l’analogie avec la structure des bases de données relationnelles.

Un index est un peu comme une table dans une base de données sur un SGBD relationnel. Chaque index dispose d’un mapping, qui permet de définir la structure des types.

Le mapping est similaire à la définition de schéma dans une base de données relationnelle. La mapping peut être définit manuellement, mais aussi généré automatiquement quand les documents sont indexés.

Les types sont comme des tables dans un système relationnel. Chaque type contient une liste des champs disponibles pour les documents.

Les documents sont comme les lignes dans une base de données relationnel. Ces documents sont stockés au format JSON et ont un index, un type et un identifiant en plus des données.

Un node est une instance d’ElasticSearch qui appartient à un cluster. Plusieurs noeuds peuvent être lancés sur un même serveur mais il est conseillé d’avoir un noeud par serveur

Un shard (tesson) est une instance de Lucene. Les shards sont gérés de manière automatique par Elasticsearch, un shard peut être primaire ou être un réplicat. Les replica shards permettent d’améliorer les performances et d’éviter les erreurs en remplaçant une shard primaire en cas d’erreur.

Utilisation

Elasticsearch s’utilise avec l’API RESTful. La communication avec la base de données se fait exclusivement en http. Les principales actions peuvent s’effectuer par le biais de 3 commandes : GET PUT et POST.

GET est équivalent à une requête SQL Select. Il permet d’interroger la base de données et de récupérer les données recherchées.

curl -XGET ‘http://localhost:9200/blog/_search?pretty=true' -d ‘
{
“query” : {
“range” : {
“postDate” : { “from” : “2011–12–10”, “to” : “2011–12–12” }
}
}
}’

PUT est équivalent à une requête SQL Insert. Il permet d’ajouter des données à la base.

curl -XPUT ‘http://localhost:9200/blog/user/dilbert' -d ‘{ “name” : “Dilbert Brown” }’curl -XPUT ‘http://localhost:9200/blog/post/1' -d ‘
{
“user”: “dilbert”,
“postDate”: “2011–12–15”,
“body”: “Search is hard. Search should be easy.” ,
“title”: “On search”
}’

Elasticsearch envoie une réponse pour vérifier si l’opération a été un succès.

POST est équivalent à une requête SQL Update. Il permet de modifier des données déjà enregistrées dans la base.

curl -XPOST ‘localhost:9200/test/type1/1/_update’ -d ‘
{
“script” : “ctx._source.remove(\”name_of_field\”)”
}’

CoffeeScript & Elasticsearch

Les requêtes curl peuvent parfois être fastidieuses (on doit écrire en une seule fois la commande curl dans le bash, quelque soit la longueur, ce qui peut vite être illisible) comme on peut le voir ci-dessous:

RESULT=$(curl -X PUT http://localhost:9200/foo)
# Hmmm, so how do I check if the outcome is {“acknowledged”:true}
if [RESULT …]

Pour y remédier, on peut faire une requête sous CoffeeScript:

La requête via CoffeeScript est beaucoup plus expressive, plus lisible et elle supporte le format JSON.

Cette présentation a été effectuée par Stanislas Heili, Mihai Indricean, Eric Tsao et Razvan Vatafu dans le cadre de l’option WEB Avancée (AWA) du parcours 4 du département Télécommunications de l’INSA de Lyon.

Source: https://www.grafikart.fr/tutoriels/serveur/elastic-search-626

--

--