I tried sandbox with neo4j. movielens, I tried it. I made a recommendation.
MATCH (p1:User {id:21})-[x:RATING]->(m:Movie)<-[y:RATING]-(p2:User)
WITH COUNT(m) AS numbermovies,
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
WHERE numbermovies > 10
WITH p1,
p2,
xyDotProduct / (xLength * yLength) AS sim
ORDER BY sim DESC
LIMIT 10
MATCH (p2)-[r:RATING]->(m:Movie)
WHERE NOT EXISTS((p1)-[:RATING]->(m))
RETURN p1.name,
p2.name,
m.title,
SUM(sim * r.rating) AS score
ORDER BY score DESC
LIMIT 5
title score
Shawshank Redemption, The (1994) 29.503255423721242
WALL set E(2008) 26.663597071412074
Inglourious Basterds (2009) 25.151535146327763
Whiplash (2014) 17.84941121812618
Shutter Island (2010) 16.417668233642118
that's all.