Elasticsearch - Indexation et recherches simples

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

Indice

La définition d'un type se fait avec une requête PUT

1
PUT <my_index>
2
{
3
  "mappings": {
4
    "<my_type>": {
5
      "properties": {
6
        "<champs1>": {
7
          "type":   "<type1>"
8
        },
9
        "<champs2>": {
10
          "type":   "<type2>"
11
        }
12
      }
13
    }
14
  }
15
}
Indice

Le type date permet la spécification du format pour remplacer le format date par défaut qui est en milliseconde .

1
"date": {
2
          "type":   "date",
3
          "format": "dd-MM-yyyy"
4
        }
Indice

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.

Solution
1
PUT cine
2
{
3
  "mappings": {
4
    "film": {
5
      "properties": {
6
        "titre": {
7
          "type":   "string"
8
        },
9
        "notation": {
10
          "type":   "long"
11
        },
12
        "date_pub": {
13
          "type":   "date",
14
          "format": "yyyy-MM-dd"
15
        },
16
        "genre": {
17
          "type":   "string"
18
        }
19
      }
20
    }
21
  }
22
}

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"

Indice

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).

1
POST http://localhost:9200/<index>/<type>
2
{
3
"champ1": <value1>,
4
"champ2": <value2>
5
}
Indice

Un tableau JSON se défini de la sorte :

1
["valeur1", "valeur2", "valeur2"]
Solution

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.

Indice

Une recherche se fait soit avec des requêtes POST, soit des requêtes GET

Indice

Le chemin de la requêtes est toujours de la sorte http://localhost:9200/[index]/[type]/[id]/[action]

Indice

Pour faire une recherche il faut toujours suffixer par _search

Solution
1
GET http://localhost:9200/cine/_search
1
POST cine/_search 
2
ou
3
POST cine/_search
4
{
5
  "query": { "match_all": {} }
6
}

Insérer les films contenu dans le fichier suivant en copiant le contenu et en exécutant la requête dans Sense

film.txt

Question

Quel est le jour de sortie du film "Gravity" ?

Indice

Vous devez trier par titre, soit avec une requête GET soit une requête POST.

Indice

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> } }

}

Solution
1
GET http://localhost:9200/cine/_search?q=titre:Gravity
2
1
POST http://localhost:9200/cine/_search
2
{
3
"query": { "match": { "titre": "Gravity" } }
4
}
5

Question

Combien y a t il de comédies ?

Indice

comedy en anglais

Solution

Il y en a 3

1
GET http://localhost:9200/cine/_search?q=genre:comedy
1
POST http://localhost:9200/cine/_search
2
{
3
"query": { "match": { "_all": "Comedy" } }
4
}
PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimer Robin Jolliet, 2016 (Contributions : Stéphane Crozat, les étudiants de l'UTC) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)