您可以通过迭代所有边并使用groupBy
. 这是一个使用weight
代替的玩具图示例property1
:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> g.E.groupBy{it.weight}{it}.cap.next()
==>0.5=[e[7][1-knows->2]]
==>1.0=[e[8][1-knows->4], e[10][4-created->5]]
==>0.4=[e[11][4-created->3], e[9][1-created->3]]
==>0.2=[e[12][6-created->3]]
因此,所有边按它们的 . 分组weight
。从那里你可以下拉到标准的常规功能,比如findAll
过滤掉你不想要的东西(在这里我过滤掉有>1
边缘的权重......在你的情况下它会是<5
)。
gremlin> g.E.groupBy{it.weight}{it}.cap.next().findAll{k,v->v.size()>1}
==>1.0=[e[8][1-knows->4], e[10][4-created->5]]
==>0.4=[e[11][4-created->3], e[9][1-created->3]]
显然,在一个非常大的图上,这有点昂贵的操作,因为您需要对边进行大量迭代,并且您必须Map
在内存中建立一个可能很大的内存,具体取决于property1
. 如果您能找到使用其他过滤器限制边缘迭代的方法,那可能会有所帮助。
如果你有一个非常大的图表,这对 Faunus 来说将是一个很好的工作。我将在这里给出简单的答案,并简单地说您不一定希望特定边的property1
值出现少于 5 次,而您只想知道不同property1
值出现的次数。使用 Faunus,您可以获得这样的分布:
g.E.property1.groupCount()