【问题标题】:How to calculate mutual friends with neo4j?如何用neo4j计算共同好友?
【发布时间】:2011-06-12 23:02:53
【问题描述】:

我想用neo4j来管理用户之间的关系。

我怎样才能让共同的朋友使用它?

【问题讨论】:

    标签: java database graph neo4j


    【解决方案1】:

    最简单的方法是跨 FRIEND_OF 关系对两个用户使用长度为 2 的最短路径算法。这些是通过一个朋友跳连接两个用户的路径。

    PathFinder<Path> finder = GraphAlgoFactory.shortestPath(
            Traversal.expanderForTypes( FRIEND_OF ), 2 );
    Iterable<Path> paths = finder.findAllPaths( user1, user2 );
    

    【讨论】:

      【解决方案2】:

      如果使用 cypher,以下查询会返回共同的朋友:

      start a = node(1), b = node(4) match (a)--(x)--(b) return x;
      

      上面的例子返回节点 1 和 4 的共同好友

      以下是图片中示例的查询副本及其结果:

      neo4j-sh (0)$ start a = node(1), b = node(4) match (a)--(x)--(b) return x;
      ==> +--------------------+
      ==> | x                  |
      ==> +--------------------+
      ==> | Node[3]{Name->"C"} |
      ==> +--------------------+
      ==> 1 row
      ==> 9 ms
      ==> 
      neo4j-sh (0)$ start a = node(1), b = node(6) match (a)--(x)--(b) return x;
      ==> +--------------------+
      ==> | x                  |
      ==> +--------------------+
      ==> | Node[5]{Name->"E"} |
      ==> | Node[2]{Name->"B"} |
      ==> +--------------------+
      ==> 2 rows
      ==> 0 ms
      

      【讨论】:

      • 如果一开始我们不知道b节点,我们可以使用START a=node(1) MATCH a--x--b WHERE a--b RETURN x
      猜你喜欢
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 2011-04-30
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多