【发布时间】:2011-06-12 23:02:53
【问题描述】:
我想用neo4j来管理用户之间的关系。
我怎样才能让共同的朋友使用它?
【问题讨论】:
我想用neo4j来管理用户之间的关系。
我怎样才能让共同的朋友使用它?
【问题讨论】:
最简单的方法是跨 FRIEND_OF 关系对两个用户使用长度为 2 的最短路径算法。这些是通过一个朋友跳连接两个用户的路径。
PathFinder<Path> finder = GraphAlgoFactory.shortestPath(
Traversal.expanderForTypes( FRIEND_OF ), 2 );
Iterable<Path> paths = finder.findAllPaths( user1, user2 );
【讨论】:
如果使用 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