加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 19:35:49 所属栏目:Java 来源:网络整理
导读:给定两个节点是否有一种有效的方法来查找一组公共节点(具有已定义的关系). 例如,使节点A1,B1,C1-C4与关系x和y连接: A1 --x-- C1A1 --x-- C2A1 --x-- C3B1 --y-- C2B1 --y-- C3B1 --y-- C4 为A1(x)和B1(y)设置的公共节点将是[C2,C3]. 解决方法 在许多情况下,
给定两个节点是否有一种有效的方法来查找一组公共节点(具有已定义的关系).

例如,使节点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;
        }
    }
}

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读