Cinémathèque 1
Le but de ces exercices est de manipuler les fonctions de base de manipulation des documents :
Création d'index et de type
Insertion de document
Modification de document
Suppression de document
Recherche simple
Question
Définir un nouveau type film dans un nouvel index cine, comportant 4 champs :
titre : string
notation : long
date_pub : date au format yyyy-MM-dd
genre : tableau de string
La définition d'un type se fait avec une requête PUT
PUT <my_index>
{
"mappings": {
"<my_type>": {
"properties": {
"<champs1>": {
"type": "<type1>"
},
"<champs2>": {
"type": "<type2>"
}
}
}
}
}
Le type date permet la spécification du format pour remplacer le format date par défaut qui est en milliseconde .
"date": {
"type": "date",
"format": "dd-MM-yyyy"
}
Dans Elasticsearch les tableaux d'objets sont reconnu automatiquement, il n'est donc pas nécessaire d'indiquer que c'est un tableau. Il suffit d'indiquer de quel type seront les objet à l’intérieur.
PUT cine
{
"mappings": {
"film": {
"properties": {
"titre": {
"type": "string"
},
"notation": {
"type": "long"
},
"date_pub": {
"type": "date",
"format": "yyyy-MM-dd"
},
"genre": {
"type": "string"
}
}
}
}
}
Question
Insérer un film dans cet index avec les informations suivantes :
titre : "Don Jon"
notation : 1
date_pub : "2013-01-18"
genre : "Comedy", "Drama"
Une indexation se fait avec une requête POST lorsqu'on ne spécifie pas l'ID (mais vous pouvez le faire avec une requête PUT).
POST http://localhost:9200/<index>/<type>
{
"champ1": <value1>,
"champ2": <value2>
}
Un tableau JSON se défini de la sorte :
["valeur1", "valeur2", "valeur2"]
POST http://localhost:9200/cine/film
{
"titre": "Don Jon",
"notation": 1,
"date_pub": "2013-01-18",
"genre":[ "Comedy", "Drama"]
}
Question
Vérifier que le fil a bien été enregistré en affichant tous les films de la base.
Une recherche se fait soit avec des requêtes POST, soit des requêtes GET
Le chemin de la requêtes est toujours de la sorte http://localhost:9200/[index]/[type]/[id]/[action]
Pour faire une recherche il faut toujours suffixer par _search
GET http://localhost:9200/cine/_search
POST cine/_search
ou
POST cine/_search
{
"query": { "match_all": {} }
}
Insérer les films contenu dans le fichier suivant en copiant le contenu et en exécutant la requête dans Sense
Question
Quel est le jour de sortie du film "Gravity" ?
Vous devez trier par titre, soit avec une requête GET soit une requête POST.
Pour ajouter un critère de recherche avec GET : http://localhost:9200/<index1>/_search?q=field:value
Pour ajouter un critère avec POST :
POST http://localhost:9200/<index1>/_search
{
"query": { "match": { "<champ1>": <terme1> } }
}
GET http://localhost:9200/cine/_search?q=titre:Gravity
POST http://localhost:9200/cine/_search
{
"query": { "match": { "titre": "Gravity" } }
}