7.9. Find friends based on similar tagging

Figure 7.8. Graph


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.

Result

namesimilar_favs
2 rows

"Sara"

2

"Derrick"

1


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