Вы можете сделать это, итерируя все ребра и используя 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
. Оттуда вы можете отказаться от стандартных функций groovy, таких как 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()