Gremlin의 전면을 너무 많이 수정하지 않고 경로 표현식의 끝에서부터 계산을 시도했습니다. 어쩌면이이 접근 할 수있는 더 좋은 방법이지만, 여기에 내가 장난감 그래프를 사용하여 한 내용은 다음과 같습니다 가장자리가 경로에 나타나도록
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> g.v(1).outE.inV.loop(2){it.loops<3}{true}.path
==>[v[1], e[7][1-knows->2], v[2]]
==>[v[1], e[8][1-knows->4], v[4]]
==>[v[1], e[9][1-created->3], v[3]]
==>[v[1], e[8][1-knows->4], v[4], e[10][4-created->5], v[5]]
==>[v[1], e[8][1-knows->4], v[4], e[11][4-created->3], v[3]]
는 그래서 outE.inV의 포함을 확인합니다. 그럼 난 가장자리에서 무게를 얻기 위해 경로에 두 번째 폐쇄을 추가
gremlin> g.v(1).outE.inV.loop(2){it.loops<3}{true}.path{it.name}{it.weight}
==>[marko, 0.5, vadas]
==>[marko, 1.0, josh]
==>[marko, 0.4, lop]
==>[marko, 1.0, josh, 1.0, ripple]
==>[marko, 1.0, josh, 0.4, lop]
를 그 다음은 요약 무게로 그 출력을 조작 할 그루비 JDK 단지 무리입니다 : 그래서
gremlin> g.v(1).outE.inV.loop(2){it.loops<3}{true}.path{it.name}{it.weight}.transform{it.toList().split{i->"${i}".isNumber()}}.collect{[it[0].sum(),it[1]]}
==>[0.5, [marko, vadas]]
==>[1.0, [marko, josh]]
==>[0.4, [marko, lop]]
==>[2.0, [marko, josh, ripple]]
==>[1.4000000059604645, [marko, josh, lop]]
, 나는 (Peter가 제안한) 변형을 집어 넣고, 가중치 인 것들과 이름 인 것들로 목록을 나눕니다. (그냥 "isNumber"라는 값을 검사함으로써 ... 다른 접근법이 필요합니다) 그리고 나서 저는 그 위에 map 함수를 실행하여 가중치 모음을 sum()하고 이름 모음을 리턴하십시오.
좋아요! 그것은 작동합니다! .. 대단히 감사합니다. – Hako