Graph 如何使用Gremlin在图形中按公共同级对来自不同父节点的所有同级节点进行分组

Graph 如何使用Gremlin在图形中按公共同级对来自不同父节点的所有同级节点进行分组,graph,graph-databases,gremlin,Graph,Graph Databases,Gremlin,我很难描述。我试图编写的Gremlin查询有一个节点作为输入。然后我用输入的类组搜索所有节点。然后在每个组中只有一个文本类节点和多个元素节点。 我想得到所有作为同级的Elem节点都是相同的文本节点,即使它们来自不同的组节点。您可以看到不同颜色的分组 我的意思是: 到目前为止,我所拥有的: g = new OrientGraph("remote:localhost/graphdb") v = g.v('#12:109') v.bothE.has('@class','hasElem').outV.

我很难描述。我试图编写的Gremlin查询有一个节点作为输入。然后我用输入的类组搜索所有节点。然后在每个组中只有一个文本类节点和多个元素节点。 我想得到所有作为同级的Elem节点都是相同的文本节点,即使它们来自不同的组节点。您可以看到不同颜色的分组

我的意思是:

到目前为止,我所拥有的:

g = new OrientGraph("remote:localhost/graphdb")
v = g.v('#12:109')
v.bothE.has('@class','hasElem').outV.has('@class','Group').bothE.or(_().has('@class','hasText'), _().has('@class','hasElem').except([v])).inV().except([v])
这会将所有绿色和蓝色节点一起返回给我,但我不知道如何进行分组

感谢您的帮助:)


谢谢

花了5个小时,但我找到了一个查询:

groupBy
映射基本上将文本节点
{it}
作为键,并将来自Text->parent->sibling
{it.inE.outV.outE.inV.hasNot('@class','Text')的叶作为值。除了([v])}
之外,除了输入之外,它不是类文本。最后一行
m.sort{a,b->b.value.size()a.value.size()}
是按人气递减顺序对文本进行排序,换句话说,相关同级列表较长的文本排在第一位

g = new OrientGraph("remote:localhost/graphdb")
v = g.v('#12:109')
m = [:]  
v.bothE.has('@class','hasElem').outV.has('@class','hasElem').dedup().bothE.has('@class','hasText').inV().groupBy(m){it}{it.inE.outV.outE.inV.hasNot('@class','Text').except([v])}
m.sort{a,b -> b.value.size() <=> a.value.size()}
g=new-OrientGraph(“远程:localhost/graphdb”)
v=g.v(“#12:109”)
m=[:]
v、 bothE.has('@class','hasElem').outV.has('@class','hasElem').dedup().bothE.has('@class','hasText').inV().groupBy(m){it}{it.inE.outV.outE.inV.hasNot('@class','Text')。除了([v])]
m、 排序{a,b->b.value.size()a.value.size()}