我认为你不需要所有 ifThenElse 的东西 . 假设我现在你的模型正确,我想你只需要这个:
gremlin> g = new TinkerGraph()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = new TinkerGraph()
==>tinkergraph[vertices:0 edges:0]
gremlin> usa = g.addVertex([name:"USA"])
==>v[0]
gremlin> va = g.addVertex([name:"VA"])
==>v[1]
gremlin> fairfax = g.addVertex([name:"Fairfax"])
==>v[2]
gremlin> country = g.addVertex([ID:"country"])
==>v[3]
gremlin> state = g.addVertex([ID:"state"])
==>v[4]
gremlin> city = g.addVertex([ID:"city"])
==>v[5]
gremlin> g.addEdge(null, fairfax, va, "in")
==>e[6][2-in->1]
gremlin> g.addEdge(null, fairfax, city, "is-a")
==>e[7][2-is-a->5]
gremlin> g.addEdge(null, va, usa, "in")
==>e[8][1-in->0]
gremlin> g.addEdge(null, va, state, "is-a")
==>e[9][1-is-a->4]
gremlin> g.addEdge(null, fairfax, usa, "in-country")
==>e[10][2-in-country->0]
gremlin> g.addEdge(null, usa, country, "is-a")
==>e[11][0-is-a->3]
gremlin> fairfax.as('x').out('in','in-country').loop('x'){it.loops<10 && it.object.out('is-a').ID.next()!='country'}.dedup.name
==>USA
挑选最后一行,你可以使用"in"或"in-country"标签从"city"(即费尔法克斯)走出去 . 显然,如果我完成了'm lucky I get to traverse on 805177 and I' . 然后我循环回 x 占位符,这样做的同时我仍然有少于10个循环而当前顶点我是一个国家 - 否则我突然离开循环因为我已到达我要发出的国家顶点 . 我 dedup 因为您的架构允许多种方式到达给定"in-country"和"in"的国家/地区 . 根据您的数据集,您可能还需要一些错误处理或其他内容,但我认为这应该会激发您提出最终解决方案 .