给定两个节点是否有一种有效的方法来查找一组公共节点(具有已定义的关系).
例如,使节点A1,B1,C1-C4与关系x和y连接:
A1 --x--> C1 A1 --x--> C2 A1 --x--> C3 B1 --y--> C2 B1 --y--> C3 B1 --y--> C4
为A1(x)和B1(y)设置的公共节点将是[C2,C3].
解决方法
在许多情况下,可以利用域的结构来提高性能.假设您知道,一般而言,与B实体上的y关系数相比,您的A实体具有更少的x关系.然后,您可以从A节点遍历两个步骤,查看B节点显示的位置,并以这种方式过滤掉C节点.以下是此方法的一些代码:
Set<Node> found = new HashSet<Node>(); for ( Relationship firstRel : a1.getRelationships( Reltypes.x,Direction.OUTGOING ) ) { Node cNode = firstRel.getEndNode(); for ( Relationship secondRel : cNode.getRelationships( Reltypes.y,Direction.INCOMING ) ) { Node bNode = secondRel.getStartNode(); if ( bNode.equals( b1 ) ) { found.add( cNode ); break; } } }
另一种方法是启动从两侧扫描关系的两个线程.