So I found 2 different ways that seem good. The first one finds the people who have the most "ACTED_IN the same movie" paths who the original person is not someone that Keanu Reeves has a "ACTED_IN the same movie" relationship with.
The second finds someone that hasn't ACTED_IN a Movie with Keanu Reeves, but is ordered by who's worked in the most movies.
Of course, it would be easiest to have created a "WORKED_WITH" relationship between all the actors that share this relationship and then searched for everyone Keanu hasn't WORKED_WITH, but that defeats the fun of the question I guess.
First solution that's pretty simple and seems pretty accurate:
MATCH (a:Person {name:"Keanu Reeves"})-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(b:Person)
WITH collect(b.name) AS FoF
MATCH (c:Person)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(d:Person)
WHERE not c.name IN FoF AND c.name <> "Keanu Reeves"
RETURN distinct c.name, count(distinct d)
ORDER BY count(distinct d) desc
limit 3
It return:
c.name | count(distinct d)
-------------------------------
Tom Hanks | 34
Cuba Gooding Jr.| 24
Tom Cruise | 23
Where d is the number of people c has "ACTED_IN" with.
Edited to add:
After 's answer I used their much more streamlined query approach to come up with this:
MATCH (a:Person)-[:ACTED_IN]->()<-[:ACTED_IN]-(b:Person)
WHERE a.name <>'Keanu Reeves'
AND NOT (a)-[:ACTED_IN]->()<-[:ACTED_IN]-(b:Person {name:'Keanu Reeves'})
RETURN a.name, count(Distinct b) AS Rating
ORDER BY Rating DESC
LIMIT 3
which returns the same thing as above.
Alternatively I used this for the people that have worked in the most movies:
MATCH (a:Person {name:"Keanu Reeves"})-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(b:Person)
WITH collect(b.name) AS FoF
MATCH (c:Person)-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(d:Person)
WHERE not c.name IN FoF AND c.name <> "Keanu Reeves"
RETURN distinct c.name, count(distinct m)
ORDER BY count(distinct m) desc
limit 3
which returns:
c.name | count(distinct m)
-------------------------------------------
Tom Hanks | 11
Meg Ryan | 5
Cuba Gooding Jr. | 4
where m is the number of movies they've worked in.