Gremlin 查询以步数遍历 JanusGraph 直到叶顶点

问题描述 投票:0回答:1

我有一个 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 的新手,我陷入了困境。任何解决此问题的帮助都可以挽救生命。

gremlin janusgraph gremlin-java
1个回答
0
投票

通常,我会以与您类似的方式编写查询。比如:

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)
测试似乎暗示它确实如此。

© www.soinside.com 2019 - 2024. All rights reserved.