使用Orient DB

时间:2017-08-02 01:06:30

标签: orientdb

我刚刚开始与Orient合作,并且正在寻找一种方法来提取(超级)图https://en.wikipedia.org/wiki/Connected_component_%28graph_theory%29的所有连通组件(子图)。  也就是说,每个提取的项是子图,其中任何两个顶点通过路径彼此连接,并且在超图中没有连接到其他顶点。 我很兴趣使用Orient DB SQL(可能是Match,Traverse)进行检索?我尝试了几个使用Natch和Traverse,但无法得到结果。我正在使用Orient DB 2.2.22社区版。

在我的测试用例中,我有一个包含11个节点和14个边缘的超图。九个节点连接,另外两个节点仅相互连接。我想发出一个查询,并能够检索2个子图。节点有class => “组”和边缘有class =“Overlaps”。

我尝试了这个作为第一个剪辑: SELECT $ path FROM(TRAVERSE both('Overlaps')FROM Groups WHILE $ depth< = 100)但是带回了一组路径。 我也尝试使用Match但确实得到了我需要的结果。 必须有一种方法来选择连接的路径的元素,然后为每个连接的集合将这些节点聚合成不同的集合。

我很感激任何可以帮助我解决这些问题的建议或例子。

由于 JGZ

1 个答案:

答案 0 :(得分:2)

为了测试你的情况,我创建了这个例子(如果错误,请纠正我):

enter image description here

如果我执行此查询:

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')

这就是我得到的:

enter image description here

第一个包含9个节点,第二个包含另外两个节点。

希望有所帮助

此致