Gremlinを使用して、2つのノード間のパスを取得できます。最初にすべてのパスを見つけることができるので、最短と最長がこれらすべてのパスに含まれます。次に例を示し
ます。
画像でわかるように、AからBには、3つのパス(A-> B、A-> F-> C-> B、A-> E-> D-> C->)があります。 B)ただし、ノードFには値「val1」のプロパティ「xyz」がないため、このパスを含めるべきではありません。
コード:
gremlin> g = new TinkerGraph()
==>tinkergraph[vertices:0 edges:0]
gremlin> a = g.addVertex(null,[name: "A", xyz: "val1"])
==>v[0]
gremlin> b = g.addVertex(null,[name: "B", xyz: "val1"])
==>v[1]
gremlin> c = g.addVertex(null,[name: "C", xyz: "val1"])
==>v[2]
gremlin> d = g.addVertex(null,[name: "D", xyz: "val1"])
==>v[3]
gremlin> e = g.addVertex(null,[name: "E", xyz: "val1"])
==>v[4]
gremlin> f = g.addVertex(null,[name: "F"])
==>v[5]
gremlin> g.addEdge(a, b, "KNOWS")
==>e[6][0-KNOWS->1]
gremlin> g.addEdge(a, e, "KNOWS")
==>e[7][0-KNOWS->4]
gremlin> g.addEdge(a, f, "KNOWS")
==>e[8][0-KNOWS->5]
gremlin> g.addEdge(f, c, "KNOWS")
==>e[9][5-KNOWS->2]
gremlin> g.addEdge(e, d, "KNOWS")
==>e[10][4-KNOWS->3]
gremlin> g.addEdge(d, c, "KNOWS")
==>e[11][3-KNOWS->2]
gremlin> g.addEdge(c, b, "KNOWS")
==>e[12][2-KNOWS->1]
そして、ノードAとノードBの間をトラバースします(ここでは、プロパティ "xyz"をフィルタリングしません)。したがって、次の3つのパスが得られます。
gremlin> a.out('KNOWS').loop(1){it.loops<100}{true}.has('name', 'B').path{it.name}
==>[A, B]
==>[A, F, C, B]
==>[A, E, D, C, B]
そして、プロパティ「xyz」のフィルターを追加します
gremlin> a.out('KNOWS').loop(1){it.loops<100 && it.object.hasNot('xyz', null)}{true}.has('name', 'B').path{it.name}
==>[A, B]
==>[A, E, D, C, B]
したがって、最短経路[A、B]と最長経路[A、E、D、C、B]が得られます。
英語は私の母国語ではないので、混乱が生じた場合は、遠慮なく私に連絡してください。