13 janvier 2014

Neo4j - Cypher - Création de graphe

Article précédent : Neo4j - Cypher - Syntaxe pour décrire les chemins et les graphes


Nous allons voir les requêtes de création de graphe en utilisant le langage Cypher de Neo4j.

Ensuite, nous utiliserons la console Web de Neo4j pour créer un graphe.

Requête de création de graphes

La requête Cypher de création d'un graphe débute par le mot clé :
CREATE

Ensuite on ajoute les expressions définissant le graphe en les séparant par des virgules.

Tout d'abord les noeuds avec des propriétés sont d'abord définies isolément sans établir de relation, comme ceci :
(a {cle: 'valeur', cle2: 'valeur'}),
(b {cle: 'valeur', cle2: 'valeur'}),
(c {cle: 'valeur', cle2: 'valeur'}),

Ensuite on établit les relations entre les noeuds qui viennent d'être déclarés:
(a)-[:lien]->(b),
(a)-[:lien]->(c)

Ceci donne la requête suivante :
CREATE (a {cle: 'valeur', cle2: 'valeur'}),
(b {cle: 'valeur', cle2: 'valeur'}),
(c {cle: 'valeur', cle2: 'valeur'}),
(a)-[:lien]->(b),
(a)-[:lien]->(c)


Exemple de graphe : relations entre des personnes

Nous prendrons comme exemple un graphe de relation entre des personnes.

Chaque personne correspond à un noeud et chaque lien entre deux personnes correspond à une relation entre deux noeuds.
  • Marc Dupont
(marc {prenom: 'Marc', nom: 'Dupont'})
  • Marc Dupont est marié avec Sophie Martin
(sophie {prenom: 'Sophie', nom: 'Dupont', nomJeuneFille: 'Martin'})
(marc)-[:mariage]->(sophie)-[:mariage]->(marc)
  • Marc et Sophie Dupont sont les parents de Jean et de Steve
(jean {prenom: 'Jean', nom: 'Dupont'})
(steve {prenom: 'Steve', nom: 'Dupont'})
(marc)-[:pere]->(jean)
(marc)-[:pere]->(steve)
(sophie)-[:mere]->(jean)
(sophie)-[:mere]->(steve)
  • Yves Martin est marié avec Julie Berthaud
(yves {prenom: 'Yves', nom: 'Martin'})
(julie {prenom: 'Julie', nom: 'Martin', nomJeuneFille: 'Berthaud'})
(yves)-[:mariage]->(julie)-[:mariage]->(yves)
  • Sophie est la fille de Yves Martin et Julie Martin
(sophie)<-[:pere]-(yves)
(sophie)<-[:mere]-(julie)
  • Sophie est la soeur de Thierry
(thierry {prenom: 'Thierry', nom: 'Martin'})
(thierry)<-[:pere]-(yves)
(thierry)<-[:mere]-(julie)
  • Thierry est le professeur d'histoire de Jean
(thierry)-[:professseur {classe: 'première', matiere: 'histoire'}]->(jean)

Requête de la création du graphe

La requête Cypher de création débute par CREATE suivi de tous les noeuds et de tous les chemins du graphe, tout cela séparés par des virgules.

Voici la requête Cypher de création de ce graphe :
CREATE (marc {prenom: 'Marc', nom: 'Dupont'}),
(sophie {prenom: 'Sophie', nom: 'Dupont', nomJeuneFille: 'Martin'}),
(marc)-[:mariage]->(sophie)-[:mariage]->(marc),
(jean {prenom: 'Jean', nom: 'Dupont'}),
(steve {prenom: 'Steve', nom: 'Dupont'}),
(marc)-[:pere]->(jean),
(marc)-[:pere]->(steve),
(sophie)-[:mere]->(jean),
(sophie)-[:mere]->(steve),
(yves {prenom: 'Yves', nom: 'Martin'}),
(julie {prenom: 'Julie', nom: 'Martin', nomJeuneFille: 'Berthaud'}),
(yves)-[:mariage]->(julie)-[:mariage]->(yves),
(sophie)<-[:pere]-(yves),
(sophie)<-[:mere]-(julie),
(thierry {prenom: 'Thierry', nom: 'Martin'}),
(thierry)<-[:pere]-(yves),
(thierry)<-[:mere]-(julie),
(thierry)-[:professseur {classe: 'première', matiere: 'histoire'}]->(jean)

Créer le graphe avec la console Web de Neo4j


Se connecter à la console Web de Neo4j :
Lancer l'exécution de la requête ci-dessus dans la console Web
Cliquer sur l'astérisque pour visualiser ce graphe :

Le graphe est affiché, cependant nous ne voyons que les "id" des noeuds.

Nous pouvons afficher une même propriété pour tous les noeuds afin de rendre le graphe compréhensible.

Pour cela, cliquer sur un des noeuds pour que la popup affichant les propriétés des noeuds apparaisse.

Cliquer sur l'oeil puis sur "id" et sélectionner la propriété "prenom".


Fermer cette popup à l'aide de la croix en haut à droite.

Nous voyons le prénom des personnes sur tous les noeuds.

Après réorganisation des noeuds, nous obtenons un graphe bien plus compréhensible qui représente les relations entre les personnes :

Nous verrons dans le prochain article comment lancer des requêtes Cypher de recherche.