我有一个 JanusGraph,其顶点包含属性键“ID”,边标记为“ML_EDGE”,包含属性键“STRENGTH”。
我必须从一个顶点开始,并根据“强度”最高的边遍历图形。
以下查询工作正常。
g.V().has('ID','id').repeat(outE("ML_EDGE").has("STRENGTH",gt(0)).limit(1).inV()).times(3);
但是当遇到叶顶点时我必须停止遍历。所以我做了一些改变。
g.V().has('ID','id').repeat(outE("ML_EDGE").has("STRENGTH",gt(0)).limit(1).inV()).until(or(loops().is(eq(2)),outE().count().is(eq(0))))
此查询返回空结果。
另外,在第一个查询中,我尝试将
times()
替换为 until()
并得到了查询,
g.V().has('ID','id').repeat(outE("ML_EDGE").has("STRENGTH",gt(0)).limit(1).inV()).until(loops().is(eq(1)));
也不起作用。
我是 JanusGraph 的新手,我陷入了困境。任何解决此问题的帮助都可以挽救生命。
通常,我会以与您类似的方式编写查询。比如:
g.V().has('ID','id').
repeat(outE("ML_EDGE").has("STRENGTH",gt(0)).limit(1).inV()).
until(not(outE()).or().loops().is(2))
我目前没有运行 JanusGraph,但我使用 Amazon Neptune 和航线数据集进行了测试。这对我有用。
g.V().has('code','YPO').
repeat(outE("route").has("dist",gt(0)).limit(1).inV()).
until(not(outE()).or().loops().is(2)).
path().
by('code').
by('dist')
并返回
path[YPO, 188, YAT, 55, ZKE]
如果这在您的情况下仍然不起作用,这可能是 JanusGraph 独有的,但这似乎有点不太可能。我通常还建议确保数据确实具有从起始节点开始的这样的路径,但是您所做的
times(3)
测试似乎暗示它确实如此。