我有一个具有以下结构的图表:
-
一些顶点表示真实世界的项目和某些类型,即"city"的顶点和特定城市的顶点,如"London"或"Seattle" . 每个顶点可以具有'is-a'边缘到其类型顶点,即
"London" -(is-a)-> "city"
,"USA" -(is-a)-> "country"
. -
顶点也可以通过"in"关系链接,即
"London" -(in)-> "UK"
,"Seattle" -(in)->"Washington"
. -
某些顶点也可能有"in-country"关系,即
"Seattle"->(in-country)->"USA"
,但有些可能没有 . -
可能有多个链接(即某个城市可以在两个国家之间存在争议,因此有两个"in-country"或"in"链接) - 在这种情况下,应返回多个国家/地区 .
任务是让每个顶点尝试找到它所在的国家(当然,对于像“city”这样的通用顶点它是没有意义的,但在这种情况下它应该只生成null) . 所以我试着这样做:
v.as('loopstep').ifThenElse{it.out('is-a').has('ID', 'country').hasNext()}{
it
}{
it.ifThenElse{it.out('in-country').hasNext()}{
it.out('in-country')
}{
it.out('in').loop('loopstep'){it.loops < 10 }
}
}
但是在循环中产生NPE,例如:
java.lang.NullPointerException
at com.tinkerpop.pipes.branch.LoopPipe.getLoops(LoopPipe.java:75)
看起来循环看不到“loopstep”标签 . 我做错了吗?编写此类遍历查询的正确方法是什么?
1 回答
我认为你不需要所有
ifThenElse
的东西 . 假设我现在你的模型正确,我想你只需要这个:挑选最后一行,你可以使用"in"或"in-country"标签从"city"(即费尔法克斯)走出去 . 显然,如果我完成了'm lucky I get to traverse on 805177 and I' . 然后我循环回
x
占位符,这样做的同时我仍然有少于10个循环而当前顶点我是一个国家 - 否则我突然离开循环因为我已到达我要发出的国家顶点 . 我dedup
因为您的架构允许多种方式到达给定"in-country"和"in"的国家/地区 . 根据您的数据集,您可能还需要一些错误处理或其他内容,但我认为这应该会激发您提出最终解决方案 .