Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
elasticsearch [Le 10/08/2017, 17:15] fabux Mise en forme lien wikipedia, Lien intra pour mise en forme pré-requis, usage mini-tuto plutot qu'apt-get ou nano, retrait liens répétés (et s'il y a un wpfr pas besoin de wp en plus). |
elasticsearch [Le 25/09/2023, 14:53] (Version actuelle) 92.174.107.9 Rangement ordre |
||
---|---|---|---|
Ligne 18: | Ligne 18: | ||
Pour réaliser ce tutoriel, mieux veut connaitre les bases de : | Pour réaliser ce tutoriel, mieux veut connaitre les bases de : | ||
* L'[[:tutoriel:comment_installer_un_paquet|installation de paquets]] | * L'[[:tutoriel:comment_installer_un_paquet|installation de paquets]] | ||
- | * La [[:tutoriel:comment_modifier_un_fichier|modification de fichiers]] de paramètres ainsi que les [[:sudo|droits d'adminisration]] qui peuvent être nécessaire. | + | * La [[:tutoriel:comment_modifier_un_fichier|modification de fichiers]] de paramètres ainsi que les [[:sudo|droits d'administration]] qui peuvent être nécessaire. |
* L'utilisation des [[:services]] | * L'utilisation des [[:services]] | ||
* Le requêtage HTTP : [[http://www.zem.fr/curl-15-commandes-pratiques-avec-curl/|Tutoriel FR]] ou [[http://www.slashroot.in/curl-command-tutorial-linux-example-usage/|Tutoriel EN]] | * Le requêtage HTTP : [[http://www.zem.fr/curl-15-commandes-pratiques-avec-curl/|Tutoriel FR]] ou [[http://www.slashroot.in/curl-command-tutorial-linux-example-usage/|Tutoriel EN]] | ||
Ligne 43: | Ligne 43: | ||
En effet, si vous saisissez cette commande : | En effet, si vous saisissez cette commande : | ||
<code bash>sudo service elasticsearch status</code> | <code bash>sudo service elasticsearch status</code> | ||
- | Alors vous devriez voir un **active (exited)** qui indique que la commande de lancement a été exécutée mais qu'on n'est pas sûr de l'état du service : | + | Alors vous devriez voir un **active (exited)** qui indique que la commande de lancement a été exécutée mais qu'on n'est pas sûr de l'état du service : |
<code bash>● elasticsearch.service - LSB: Starts elasticsearch | <code bash>● elasticsearch.service - LSB: Starts elasticsearch | ||
Loaded: loaded (/etc/init.d/elasticsearch; bad; vendor preset: enabled) | Loaded: loaded (/etc/init.d/elasticsearch; bad; vendor preset: enabled) | ||
Ligne 68: | Ligne 68: | ||
<note help> FIXME A quoi servent réellement ces commandes ? | <note help> FIXME A quoi servent réellement ces commandes ? | ||
* D'un côté la variable //START_DAEMON// n'est pas utilisée dans la suite du script. Donc pourquoi forcer l'arrêt du script si elle n'existe pas ? | * D'un côté la variable //START_DAEMON// n'est pas utilisée dans la suite du script. Donc pourquoi forcer l'arrêt du script si elle n'existe pas ? | ||
- | * Ensuite, le groupe défini par la variable //ES_USER// ne semble pas avoir le droit de lancer le démon alors que l'utilisateur référencé par la même variable lui le peut. | + | * Ensuite, le groupe défini par la variable //ES_USER// ne semble pas avoir le droit de lancer le démon alors que l'utilisateur référencé par la même variable lui le peut. |
Bizarre.</note> | Bizarre.</note> | ||
Ligne 140: | Ligne 140: | ||
====Opérations de base==== | ====Opérations de base==== | ||
+ | <note tip>Les exemples ci-dessous utilisent la [[:tutoriel/console_commandes_de_base|commande]] //curl//, il est possible de l'agrémenter de la commande [[:json_query]],\\ | ||
+ | voire d'installer le logiciel [[https://insomnia.rest/|Insomnia]](OSS)</note> | ||
Dans un base de données, il existe 4 opérations de base. Elles sont synthétisées sous l'acronyme [[wpfr>CRUD|CRUD]] : | Dans un base de données, il existe 4 opérations de base. Elles sont synthétisées sous l'acronyme [[wpfr>CRUD|CRUD]] : | ||
- **C**reate : création d'une donnée | - **C**reate : création d'une donnée | ||
- | - **D**elete : supression d'une donnée | ||
- **R**ead : lecture d'une donnée | - **R**ead : lecture d'une donnée | ||
- **U**pdate : mise-à-jour d'une donnée | - **U**pdate : mise-à-jour d'une donnée | ||
+ | - **D**elete : supression d'une donnée | ||
De même, le protocole [[wpfr>Hypertext_Transfer_Protocol#M.C3.A9thodes|HTTP]] possède, entre autres, 4 méthodes : | De même, le protocole [[wpfr>Hypertext_Transfer_Protocol#M.C3.A9thodes|HTTP]] possède, entre autres, 4 méthodes : | ||
- | - **G**ET : accession à une ressource | ||
- **P**OST : publication d'une nouvelle ressource | - **P**OST : publication d'une nouvelle ressource | ||
+ | - **G**ET : accession à une ressource | ||
- **P**UT : mise-à-jour d'une ressource existante (création si elle n'existe pas) | - **P**UT : mise-à-jour d'une ressource existante (création si elle n'existe pas) | ||
- **D**ELETE : suppression d'une donnée | - **D**ELETE : suppression d'une donnée | ||
Ligne 155: | Ligne 157: | ||
Dans le cadre d'Elasticsearch, on peut donc faire le rapprochement : | Dans le cadre d'Elasticsearch, on peut donc faire le rapprochement : | ||
- Create ↔ POST | - Create ↔ POST | ||
- | - Delete ↔ DELETE | ||
- Read ↔ GET | - Read ↔ GET | ||
- Update ↔ PUT | - Update ↔ PUT | ||
+ | - Delete ↔ DELETE | ||
- | ===Indexation=== | + | === Indexation === |
- | <note tip>Elastic ne fait pas de différence fondamental entre "Create ↔ POST" et "Update ↔ PUT". Ces 2 opérations se confondent en une seule : l'indexation.</note> | + | <note tip>Elastic ne fait pas de différence fondamental entre "Create ↔ POST" et "Update ↔ PUT". Ces 2 opérations se confondent en une seule : l'indexation.\\ |
+ | Notez cependant qu'avec POST, l'identifiant est auto-généré, comme un aute-incrément de base de données, alors qu'aver PUT, vous pouvez spécifier la valeur de l'identifiant ((https://stackoverflow.com/a/56766777)), ce qui peut être intéressant lors de l'indexation d'une base relationnelle</note> | ||
+ | |||
+ | Pour ajouter un enregistrement dans Elasticsearch, on peut prendre comme exemple une méthode PUT : | ||
+ | À partir de la version 7, le //type// disparaît de l'url ((https://www.elastic.co/guide/en/elasticsearch/reference/7.17/removal-of-types.html)) | ||
+ | == avec ES version 8 == | ||
+ | <code bash>curl -XPUT "http://localhost:9200/movies/_doc/1" -d' | ||
+ | { | ||
+ | "movie": { | ||
+ | "title": "The Godfather", | ||
+ | "director": "Francis Ford Coppola", | ||
+ | "year": 1972 | ||
+ | } | ||
+ | }'</code> | ||
- | Pour ajouter un enregistrement dans Elasticsearch, on peut prendre comme exemple un méthode PUT : | + | == avec ES version < 7 == |
<code bash>curl -XPUT "http://localhost:9200/movies/movie/1" -d' | <code bash>curl -XPUT "http://localhost:9200/movies/movie/1" -d' | ||
{ | { | ||
Ligne 241: | Ligne 256: | ||
===Lecture sur un index=== | ===Lecture sur un index=== | ||
+ | <note important>Comme déjà préciser lors du PUT, à partir d'ES v7, il n'y a plus de //type//, les requêtes GET s'en trouvent aussi modifiées</note> | ||
Maintenant que nous avons créé et modifié des enregistrements, il est facilement possible de les récupérer via la méthode ''GET'' en utilisant uniquement les IDs. Par exemple, pour récupérer notre premier film : | Maintenant que nous avons créé et modifié des enregistrements, il est facilement possible de les récupérer via la méthode ''GET'' en utilisant uniquement les IDs. Par exemple, pour récupérer notre premier film : | ||
+ | == avec ES version 8 == | ||
+ | <code bash>curl -XGET "http://localhost:9200/movies/_doc/1"</code> | ||
+ | |||
+ | == avec ES version < 7 | ||
<code bash>curl -XGET "http://localhost:9200/movies/movie/1"</code> | <code bash>curl -XGET "http://localhost:9200/movies/movie/1"</code> | ||
On reçoit en réponse quelque chose de similaire à l'indexation, mais : | On reçoit en réponse quelque chose de similaire à l'indexation, mais : | ||
Ligne 476: | Ligne 496: | ||
} | } | ||
}'</code> | }'</code> | ||
- | Ce qui va renvoyés 2 résultats au format déjà connu : | + | Ce qui va renvoyer 2 résultats au format déjà connu : |
<code bash>{"took":5,"timed_out":false,"_shards":{"total":1,"successful":1,"failed":0},"hits":{"total":2,"max_score":0.36067212,"hits":[{"_index":"movies","_type":"movie","_id":"2","_score":0.36067212,"_source": | <code bash>{"took":5,"timed_out":false,"_shards":{"total":1,"successful":1,"failed":0},"hits":{"total":2,"max_score":0.36067212,"hits":[{"_index":"movies","_type":"movie","_id":"2","_score":0.36067212,"_source": | ||
{ | { | ||
Ligne 529: | Ligne 549: | ||
<note>La différence entre query et filter est assez subtile : | <note>La différence entre query et filter est assez subtile : | ||
- | * **query** fait une recherche élargie : tout enregistrement correspond partiellement à la requête sera retourné. Ce genre de recherche est donc plus lent. Il est utile pour faire les recherches à partir de champs saisis par un utilisateurs. | + | * **query** fait une recherche élargie : tout enregistrement correspondant partiellement à la requête sera retourné. Ce genre de recherche est donc plus lent. Il est utile pour faire les recherches à partir de champs saisis par un utilisateurs. |
* **filter** fait une recherche stricte : un document ne ressortira que s'il correspond rigoureusement à tous les critères. Ce genre de recherche est donc plus rapide. Il est utile pour rajouter des contraintes qui seront fixés par le système plus que par l'utilisateur. | * **filter** fait une recherche stricte : un document ne ressortira que s'il correspond rigoureusement à tous les critères. Ce genre de recherche est donc plus rapide. Il est utile pour rajouter des contraintes qui seront fixés par le système plus que par l'utilisateur. | ||
Il faut donc bien réfléchir à la façon dont seront faites les recherches et concevoir les requêtes les plus adaptés au contexte. | Il faut donc bien réfléchir à la façon dont seront faites les recherches et concevoir les requêtes les plus adaptés au contexte. | ||
Ligne 651: | Ligne 671: | ||
* [[https://www.elastic.co/fr/products/elasticsearch|Site du projet]] sur [[https://www.elastic.co/fr|Elastic.co]] | * [[https://www.elastic.co/fr/products/elasticsearch|Site du projet]] sur [[https://www.elastic.co/fr|Elastic.co]] | ||
* [[https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-16-04|How to install Elasticsearch on Ubuntu 16.04]]<sup>(en)</sup> | * [[https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-16-04|How to install Elasticsearch on Ubuntu 16.04]]<sup>(en)</sup> | ||
+ | * [[https://hub.docker.com/_/elasticsearch]] image docker officielle | ||
+ | * [[https://grafikart.fr/tutoriels/elastic-search-626]]<sup>(fr)</sup> tutoriel (2015… //obsolète//), 43mn | ||
+ | * [[https://www.editions-eni.fr/video/elasticsearch-indexez-vos-donnees-pour-une-recherche-efficace-vtelastic|tuto vidéo aux éditions ENI sur la v8]] (PAYANT) | ||
* [[http://joelabrahamsson.com/elasticsearch-101/|How to install Elasticsearch]]<sup>(en)</sup> | * [[http://joelabrahamsson.com/elasticsearch-101/|How to install Elasticsearch]]<sup>(en)</sup> | ||
---- | ---- | ||
- | //Contributeurs:// FIXME | + | //Contributeurs: demi-boulet, [[:utilisateurs/bcag2]]// |