Jon*_*nas 5 java graph set neo4j
给定两个节点是否有一种有效的方法来查找一组公共节点(具有已定义的关系).
例如,具有节点A1
,B1
,C1
- C4
与关系进行连接x
和y
:
A1 --x--> C1
A1 --x--> C2
A1 --x--> C3
B1 --y--> C2
B1 --y--> C3
B1 --y--> C4
Run Code Online (Sandbox Code Playgroud)
为A1(x)
和B1(y)
将要设置的公共节点[C2, C3]
.
在Gremlin(http://gremlin.tinkerpop.com)中,这表达如下:
setA._().out('x').in('y').retain(setB).back(2)
Run Code Online (Sandbox Code Playgroud)
以下是每个步骤的作用:
田田!
祝你好运,马可.
在许多情况下,可以利用域的结构来提高性能。比方说,你知道,在一般的A
实体较少x
相比,数量关系y
上的关系B
实体。然后,您可以从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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是启动两个线程来从任一侧扫描关系。
第三种方法是创建一个专门的索引,以帮助回答此类查询,这显然会损害插入性能。
归档时间: |
|
查看次数: |
2272 次 |
最近记录: |