Orientdb 使用Orient DB查找超级图的连通子图

Orientdb 使用Orient DB查找超级图的连通子图,orientdb,Orientdb,我刚刚开始使用Orient,并且正在寻找一种方法来提取(超级)图的所有连接组件(子图)。 也就是说,每个提取项都是一个子图,其中任意两个顶点通过路径相互连接,并且不连接到超级图中的其他顶点。 我对使用OrientDBSQL(可能是匹配、遍历)进行检索很感兴趣?我尝试了几次使用Natch和Traverse,但都没有得到结果。我正在使用Orient DB 2.2.22社区版 在我的测试用例中,我有一个有11个节点和14条边的超级图。其中九个节点已连接,另外两个节点仅相互连接。我想发出一个查询并能够检

我刚刚开始使用Orient,并且正在寻找一种方法来提取(超级)图的所有连接组件(子图)。 也就是说,每个提取项都是一个子图,其中任意两个顶点通过路径相互连接,并且不连接到超级图中的其他顶点。 我对使用OrientDBSQL(可能是匹配、遍历)进行检索很感兴趣?我尝试了几次使用Natch和Traverse,但都没有得到结果。我正在使用Orient DB 2.2.22社区版

在我的测试用例中,我有一个有11个节点和14条边的超级图。其中九个节点已连接,另外两个节点仅相互连接。我想发出一个查询并能够检索这两个子图。节点具有class=>“Group”,边具有class=“Overlaps”


我第一次尝试这样做:从组中选择$path FROM(遍历两个('Overlaps'),而$depth来测试您的案例,我创建了这个示例(如果错误,请纠正我):

如果我执行这个查询:

select $a as sub_graph_one,$b as sub_graph_two
LET $a = (select @this.toJSON('fetchPlan:*:-1') from Group where name = 'group001'),
$b = (select @this.toJSON('fetchPlan:*:-1') from Group where name = 'group008')
这就是我得到的:

第一个包含9个节点,第二个包含其他两个节点

希望能有帮助


为了测试您的案例,我创建了这个示例(如果有错误,请纠正我):

如果我执行这个查询:

select $a as sub_graph_one,$b as sub_graph_two
LET $a = (select @this.toJSON('fetchPlan:*:-1') from Group where name = 'group001'),
$b = (select @this.toJSON('fetchPlan:*:-1') from Group where name = 'group008')
这就是我得到的:

第一个包含9个节点,第二个包含其他两个节点

希望能有帮助


关于

Hi,如果我理解得很好,您的查询应该返回类组的所有节点,并且这些节点必须通过Overlps边相互连接,对吗?您好,是的,在11个节点中,有9个作为连接子图相互连接,另外2个仅相互连接,而不是任何其他节点。我需要的是提取2个子图,其中一个有9个节点,另一个有2个。感谢JGZI,如果我理解得很好,您的查询应该返回类组的所有节点,这些节点必须通过Overlps边相互连接,对吗?您好,是的,在11个节点中,有9个作为连接的子节点相互连接graph和其他2个仅相互连接,而不与其他任何一个相连接。我需要的是提取出2个子图,其中一个有9个节点,另一个有2个。感谢JGZHello,您的场景正是我所看到的,非常有用。不同的是,在我的场景中,我事先不知道会出现哪些组因此,我不能假设从特定节点开始。此解决方案要求从“group001”开始,然后从“group008”开始,然后获取连接的成员。在我的情况下,我不会提前知道,如果我在某个节点随机开始遍历,我将仅获取该节点的连接组。谢谢JGZHello,您的场景这正是我所看到的,而且很有帮助。不同之处在于,在我的场景中,我事先不知道哪些组在哪里,因此我无法假设从特定节点开始。此解决方案要求从“group001”开始,然后从“group008”开始,然后获得连接的成员。在我的情况下,我不会提前知道如果我在某个节点随机开始遍历,我只会得到该节点的连接组。谢谢JGZ