How to get friends of friends that have the same interest?

一世执手 提交于 2019-12-05 07:21:32

问题


Getting friends of friend are pretty easy, I got this which seems to work great.

g.v(1).in('FRIEND').in('FRIEND').filter{it != g.v(1)}

But what I want to do is only get friends of friends that have the same interests. Below I want Joe to be suggested Moe but not Noe because they do not have the same interest.


回答1:


You simply need to extend your gremlin traversal to go over the LIKES edges too:

g.v(1).in('FRIEND').in('FRIEND').filter{it != g.v(1)}.dedup() \
       as('friend').in('LIKES').out('LIKES').filter{it == g.v(1)}. \
       back('friend').dedup()

Basically this goes out to friends of friends, as you had before and saves the position in the pipe under the name friend. It then goes out to mutual likes and searches for the original source node. If it finds one it jumps back friend. The dedup() just removes duplicates and may speed up traversals.

The directionality of this may not be 100% correct as you haven't indicated direction of edges in your diagram.




回答2:


Does this have to be in Gremlin? If Cypher is acceptable, you can do:

START s=node(Joe)
MATCH s-[:FRIEND]-()-[:FRIEND]-fof, s-[:LIKES]-()-[:LIKES]-fof
WHERE s != fof
RETURN fof



回答3:


Query to get Mutual friends without considering common likes, But if you they have common likes it will come on top. Take a look of Order by.

    MATCH (me:User{userid:'34219'}) 
    MATCH (me)-[:FRIEND]-()-[:FRIEND]-(potentialFriend)
    WITH me, potentialFriend,  COUNT(*) AS friendsInCommon
    WITH me,
         potentialFriend,
         SIZE((potentialFriend)-[:LIKES]->()<-[:LIKES]-(me)) AS sameInterest, 
         friendsInCommon
    WHERE NOT (me)-[:FRIEND]-(potentialFriend)
    RETURN potentialFriend, sameInterest, friendsInCommon, 
    friendsInCommon + sameInterest AS score
    ORDER BY score DESC;

If you want only common likes add foll. condition -

Where sameInterest>0


来源:https://stackoverflow.com/questions/9952022/how-to-get-friends-of-friends-that-have-the-same-interest

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!