java – 使用neo4j查找与给定节点有关系的节点集的有效方法

前端之家收集整理的这篇文章主要介绍了java – 使用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

为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;
        }
    }
}

另一种方法是启动从两侧扫描关系的两个线程.

第三种方法是创建一个专门的索引来帮助回答这种查询,这显然会损害插入性能.

猜你在找的Java相关文章