Model 0
Ćwiczenie 1
Ćwiczenia 2
MATCH p=shortestPath((s0:Skill {name : "Java"})-[:REQUIRES|INTRODUCES*]-(s1:Skill {name : "REST"})
WHERE NOT ()<-[:REQUIRES]-s1
RETURN p;
MATCH (a:Skill {name:"Java"})<-[:REQUIRES]-(b:Training)
MATCH (c:Training)-[:INTRODUCES]->(d:Skill {name:"REST"})
MATCH p=allShortestPaths(b-[rels:REQUIRES|INTRODUCES*]-c)
WHERE length(p)%2=0 AND ALL(idx in range(0, length(p)-2,2) WHERE type(rels[idx])="INTRODUCES" AND type(rels[idx+1]) = "REQUIRES")
return p
AND ALL(idx in range(0, size(p)-1) WHERE type(rels[idx]) = (CASE idx % 2 when 0 then "REQUIRES" else "INTRODUCES" END) )
Model 1
Ćwiczenie 2b
create index on :Message(`Message-Id`);
create index on :Message(`In-Reply-To`);
MATCH (n:Message)
MATCH (m:Message)
WHERE n.`Message-Id`=m.`In-Reply-To`
CREATE (n)<-[:IN_REPLY_TO]-(m);
Ćwiczenie 2c
MATCH mailThread=((n:Message)<-[:IN_REPLY_TO*]-(m:Message))
WHERE NOT ()<-[:IN_REPLY_TO]-(n) AND NOT (m)<-[:IN_REPLY_TO]-()
WITH mailThread, length(nodes(mailThread)) AS c
RETURN c,nodes(mailThread)[0]
ORDER BY c DESC
LIMIT 5;
Ćwiczenie 3
OPTIONAL MATCH (m:Message)<-[:IN_REPLY_TO]-(n:Message)-[:TO|CC|BCC]->(r)
WHERE NOT (m)-[:TO|CC|BCC]->(r)
WITH n,r
MATCH (n)-[:FROM]->(f)
MERGE (r)-[:KNOWS]-(f);
Ćwiczenie 4
MATCH (a)-[r:KNOWS]-(b) where not id(a)=2 and not id(b)=2 RETURN r;
MATCH (a)-[:KNOWS]-(b)
WITH count(distinct b) AS neighbours
MATCH (a)-[:KNOWS]-()-[r:KNOWS]-()-[:KNOWS]-(a)
WITH a, neighbours, count(distinct r) AS connected_neighbours
SET a.clustering=(toFloat(connected_neighbours)/(neighbours*(neighbours-1)))
MATCH (a:InternetAddress)
WHERE EXISTS(a.clustering)
RETURN id(a), a.personal, a.clustering order by a.clustering desc limit 5;
Model 2
Ćwiczenie 0 (import danych)
LOAD CSV WITH HEADERS FROM 'file:///u.item' AS item FIELDTERMINATOR '|'
CREATE (:Movie { movieId : toInt(item.movieId), title : item.title, releaseDate : item.releaseDate, imdbURL : item.imdbURL});
LOAD CSV WITH HEADERS FROM 'file:///u.user' as user FIELDTERMINATOR '|'
CREATE (:User {userId : toInt(user.userId), age : toInt(user.age), gender : user.gender, occupation : user.occupation, zipcode : user.zipcode});
CREATE CONSTRAINT ON (movie:Movie) ASSERT movie.movieId IS UNIQUE;
CREATE CONSTRAINT ON (user:User) ASSERT user.userId IS UNIQUE;
LOAD CSV WITH HEADERS FROM 'file:///u.data' as reco FIELDTERMINATOR '|'
MATCH (user:User {userId : toInt(reco.userId)}), (movie:Movie { movieId : toInt(reco.movieId)}) CREATE (user)-[:RATED { rating : toInt(reco.rating), timestamp : toInt(reco.timestamp)}]->(movie);
Ćwiczenie 1
MATCH (a:User)-[:RATED]->(m:Movie)<-[:RATED]-(b:User)-[:RATED]->(n:Movie)
WHERE a.userId="333" AND NOT (a-[:RATED]->n)
RETURN n.title LIMIT 50;
Ćwiczenie 2
LOAD CSV FROM 'file:///u.item' AS row FIELDTERMINATOR '|'
MATCH (movie:Movie { movieId : toInt(row[0])} )
FOREACH (_ IN [f IN row[5..6] WHERE f = "1"] | SET movie :Action)
FOREACH (_ IN [f IN row[6..7] WHERE f = "1"] | SET movie :Adventure)
FOREACH (_ IN [f IN row[7..8] WHERE f = "1"] | SET movie :Animation)
FOREACH (_ IN [f IN row[8..9] WHERE f = "1"] | SET movie :Children)
FOREACH (_ IN [f IN row[9..10] WHERE f = "1"] | SET movie :Comedy)
FOREACH (_ IN [f IN row[10..11] WHERE f = "1"] | SET movie :Crime)
FOREACH (_ IN [f IN row[11..12] WHERE f = "1"] | SET movie :Documentary)
FOREACH (_ IN [f IN row[12..13] WHERE f = "1"] | SET movie :Drama)
FOREACH (_ IN [f IN row[13..14] WHERE f = "1"] | SET movie :Fantasy)
FOREACH (_ IN [f IN row[14..15] WHERE f = "1"] | SET movie :FilmNoir)
FOREACH (_ IN [f IN row[15..16] WHERE f = "1"] | SET movie :Horror)
FOREACH (_ IN [f IN row[16..17] WHERE f = "1"] | SET movie :Musical)
FOREACH (_ IN [f IN row[17..18] WHERE f = "1"] | SET movie :Mystery)
FOREACH (_ IN [f IN row[18..19] WHERE f = "1"] | SET movie :Romance)
FOREACH (_ IN [f IN row[19..20] WHERE f = "1"] | SET movie :SciFi)
FOREACH (_ IN [f IN row[20..21] WHERE f = "1"] | SET movie :Thriller)
FOREACH (_ IN [f IN row[21..22] WHERE f = "1"] | SET movie :War)
FOREACH (_ IN [f IN row[22..23] WHERE f = "1"] | SET movie :Western);
LOAD CSV WITH HEADERS FROM 'file:src/main/resources/movielens/100k/u.item' AS row FIELDTERMINATOR '|'
MATCH (movie:Movie { movieId : row.movieId} ) WHERE row.Action="1" SET movie :Action;
Ćwiczenie 3
MATCH (p1:User)-[x:RATED]->(m:Movie)<-[y:RATED]-(p2:User)
WITH SUM(x.rating * y.rating) AS xyDotProduct,
SQRT(REDUCE(xDot = 0.0, a IN COLLECT(x.rating) | xDot + a^2)) AS xLength,
SQRT(REDUCE(yDot = 0.0, b IN COLLECT(y.rating) | yDot + b^2)) AS yLength,
p1, p2
MERGE (p1)-[s:SIMILARITY]-(p2)
SET s.similarity = xyDotProduct / (xLength * yLength);
MATCH (p1:User {userId:333})-[s:SIMILARITY]-(p2:User)
WITH p2, s.similarity AS sim
ORDER BY sim DESC
LIMIT 5
RETURN p2.userId AS Neighbor, sim AS Similarity
MATCH (b:User)-[r:RATED]->(m:Movie), (b)-[s:SIMILARITY]-(a:User {userId:333})
WHERE NOT((a)-[:RATED]->(m))
WITH m, s.similarity AS similarity, r.rating AS rating
ORDER BY m.title, similarity DESC
WITH m.title AS movie, COLLECT(rating)[0..3] AS ratings
WITH movie, REDUCE(s = 0, i IN ratings | s + i)*1.0 / LENGTH(ratings) AS reco
ORDER BY reco DESC
RETURN movie AS Movie, reco AS Recommendation