S'intéresser de plus près à l'outil
N'oubliez pas de changer de database entre chaque exercice ! -> Comment Faire ?
On mange où ce midi ?
Aucunes des informations qui vont suivre ne sont à prendre au premier degré !
J'ai modélisé grossièrement nos interactions quant au choix du restaurant où nous allons manger ce midi.
L'idée était de mettre en place des interactions entre des objets hétérogènes en observant une approche orientée résultat.
Vous allez avoir besoin du fichier suivant :« (vous pouvez déjà l'importer sur votre base comme dans l'exercice précédent) »
L'objectif sera de répondre à deux questions.
Question
Première question :
Avec qui suis-je compatible ?
Comprendre par là : Est compatible avec moi quelqu'un qui, soit mange [:MANGE] les mêmes choses que moi, soit [ :AIME] les mêmes restaurants que moi.
Avant de répondre à cette question, il est peut-être judicieux de consulter le graphe importé afin d'en comprendre la structure.
Pensez aussi à restreindre le graphe avec des requêtes afin qu'il soit plus lisible.
On peut toujours enchaîner les requêtes dans le match.
Il est possible d'écrire cette requête en une ligne de match et un return.
Voici la requête :
match (moi{fullname : 'Ulysse Meyer'})-[r1:MANGE]->(nourriture)<-[r2:MANGE]-(amiparnourriture)
match (moi{fullname : 'Ulysse Meyer'})-[r3:AIME]->(restaurant)<-[r4:AIME]-(amiparrestaurant)
return r1,r2,r3,r4
Équivalent à :
match (amiparrestaurant)-[r4:AIME]->(restaurant)<-[r3:AIME]-(moi{fullname : 'Ulysse Meyer'})-[r1:MANGE]->(nourriture)<-[r2:MANGE]-(amiparnourriture)
return r1,r2,r3,r4
Soit visuellement :
Question
Le but de l'exercice est de savoir où l'on va pouvoir manger ce soir.
Par conséquent, je vous le demande, quels restaurants satisferaient un maximum de monde ?
L'objectif est d'obtenir les listes des trois restaurant les plus compatibles avec les différents "human".
Un restaurant est compatible avec un "human" si, soit l'"human" l' :AIME soit il :PROPOSE un plat que l'"human" :MANGE...
Pensez à COUNT et WHERE (pour exclure l’intersection de deux relations), aussi, "distinct" exist en Cypher (« count( distinct x) ... »
)
Order By DESC et Limit existe aussi en Cypher.
On peut enchaîner les relations...
Voici la requête :
match (r:restaurant)<-[:AIME]-(h2:human)
match (r:restaurant)-[:PROPOSE]->(:plat)<-[:MANGE]-(h1:human)
WHERE not(h1-[:AIME]->r)
return r, (count(distinct h1)+count(distinct h2)) as combatibilité_totale
order by combatibilité_totale DESC
limit 3
C'est Flunch ce soir !