Intro
Elasticsearch est un serveur de recherche, conçu pour indexer des ressources et offrir un système de moteur de recherche. Construit sur Apache Lucene, Elasticsearch s’utilise principalement via une API REST. Il fournit un moteur de recherche "full-text" multitenant avec une API RESTFul et dont les entités sont sauvegardées sous forme de documents JSON. Il a été conçu dans l'optique d'être évolutif, avec un système de clustering, de loadbalancing et est capable de reconstruire les données perdues dû à, par exemple, un node défectueux.
Installation de Java
La première chose à faire est d’ajouter deux dépots
echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee /etc/apt/sources.list.d/webupd8team-java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
apt-get update
Ensuite, on va installer Java (8 dans ce cas) qui est un prérequis. Si vous voulez une autre version de Java tel que java 6 ou java 7, il suffit d’adapter le chiffre dans le nom du paquet (oracle-java6-installer par exemple)
apt-get install oracle-java8-installer
Avec java -version vous pouvez vérifier la correcte installation. 1.8.xx pour Java 8 par exemple
Pour en finir avec Java, nous allons mettre la version installée en version par défaut
sudo apt-get install oracle-java8-set-default
Même principe, si vous avez installé Java 6 pensé à adapter le nom du paquet
wget --no-check-certificate -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
sudo apt-get update && sudo apt-get install elasticsearch
Paramétrage :
sudo nano /etc/elasticsearch/elasticsearch.yml
Activer les lignes suivantes et configurer comme suit :
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 192.168.0.34
#
# Set a custom port for HTTP:
#
http.port: 9200
Réglage de la mémoire de la JVM :
sudo nano /etc/elasticsearch/jvm.options
-Xms4g
-Xmx4g
Démarrage auto :
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
Démarrage :
sudo -i service elasticsearch start
sudo -i service elasticsearch stop
Debug :
sudo journalctl -f
sudo journalctl --unit elasticsearch
On vérifie que le service est bien lancé en allant dans le navigateur à l'adresse : http://192.168.0.34:9200
On doit obtenir une réponse json de ce type :
{
"name" : "dHm71Q1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "Nkkmbc3vQpajkKD4eQhZ8Q",
"version" : {
"number" : "6.1.1",
"build_hash" : "bd92e7f",
"build_date" : "2017-12-17T20:23:25.338Z",
"build_snapshot" : false,
"lucene_version" : "7.1.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
Comment faire des requêtes en rest avec Elasticsearch
http://
:/[index]/[type]/[_action/id]
TERMINOLOGIE
Voici un peu de vocabulaire propre à Elasticsearch.
Un index peut être assimilé à 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 votre schéma de base de données. Vous pouvez le définir manuellement, sinon il sera généré automatiquement lors de la première indexation de votre document. Attention, une fois le mapping définit, il vous est impossible de le modifier. Il vous faudra le supprimer, le redéfinir et relancer une indexation de vos données.
Les types représentent une table dans un SGBD. Chaque type contient une liste des champs équivalant aux colonnes constituant votre table.
Les documents représentent une entrée dans votre type. Ces documents sont stockés au format JSON et possèdent un index, un type et un id.
Un node est une instance d’ElasticSearch.
Un shard vous permet de répartir vos données sur plusieurs nodes car il y a une limite physique à la taille d’un index sur un seul node. Les shards sont gérés de manière automatique par Elasticsearch, un shard peut être primaire ou être un duplicata.
Les replicas sont des copies des shards primaires auxquels elles sont rattachées. En cas d’erreur du primaire, un replica deviendra shard primaire selon un système d’élection afin que l’application reste disponible.
Un cluster est une collection de node, donc plusieurs instances d’Elasticsearch qui vont partager toutes vos données. Il est identifié par un nom ce qui permet à un node de faire partie du cluster lors de son instanciation.
Trêve de bavardage, je vous sens impatients de commencer donc en avant pour l’installation ! J’espère que vous avez 5 minutes devant vous