To find people similar to me based on the taggings of their favorited items, one approach could be:
Query.
START me=node:node_auto_index(name = "Joe") MATCH me-[:favorite]->myFavorites-[:tagged]->tag<-[:tagged]-theirFavorites<-[:favorite]-people WHERE NOT(me=people) RETURN people.name as name, count(*) as similar_favs ORDER BY similar_favs DESC
The query returns the list of possible friends ranked by them liking similar stuff that are not yet friends.
Try this query live. (1) {"name":"Animals"} (2) {"name":"Hobby"} (3) {"name":"Surfing"} (4) {"name":"Sara"} (5) {"name":"Cats"} (6) {"name":"Derrick"} (7) {"name":"Horses"} (8) {"name":"Bikes"} (9) {"name":"Joe"} (3)-[:tagged]->(2) {} (4)-[:favorite]->(8) {} (4)-[:favorite]->(7) {} (5)-[:tagged]->(1) {} (6)-[:favorite]->(8) {} (7)-[:tagged]->(1) {} (8)-[:tagged]->(2) {} (9)-[:favorite]->(5) {} (9)-[:favorite]->(7) {} (9)-[:favorite]->(8) {} (9)-[:favorite]->(3) {} START me=node:node_auto_index(name = "Joe") MATCH me-[:favorite]->myFavorites-[:tagged]->tag<-[:tagged]-theirFavorites<-[:favorite]-people WHERE NOT(me=people) RETURN people.name as name, count(*) as similar_favs ORDER BY similar_favs DESC
Copyright © 2013 Neo Technology