同一个图上的同一个查询在Neptune和Gremlify上返回不同的结果

2024-06-16 13:24:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Neptune上有一个大的生产图,我使用Gremlin Python查询它。我编写了一个查询,该查询应该返回包含以任何方式连接到查询顶点(根顶点)的所有顶点和边的路径

似乎这个查询并不总是返回我期望的所有顶点和边,所以我在Neptune中创建了一个小样本图,在Gremlify上创建了相同的图:https://gremlify.com/d4xp81hwd1g

然后我在Neptune和Gremlify上运行了两次查询,每个查询都有不同的根顶点。在这两种情况下,从海王星返回的路径始终是从Gremlify返回的路径的子集

海王星图表创建:

g.addV("c").property(id, "c139").iterate()
g.addV("c").property(id, "c121").iterate()
g.addV("c").property(id, "c146").iterate()
g.addV("c").property(id, "c128").iterate()

g.addV("d").property(id, "d5E0").iterate()
g.addV("d").property(id, "d546").iterate()
g.addV("d").property(id, "d434").iterate()
g.addV("d").property(id, "dDE5").iterate()
g.addV("d").property(id, "dFFE").iterate()

g.addE("has_d").from_(g.V("c139")).to(g.V("d5E0")).property(id, "c139_d5E0").iterate()
g.addE("has_d").from_(g.V("c139")).to(g.V("d546")).property(id, "c139_d546").iterate()
g.addE("has_d").from_(g.V("c121")).to(g.V("d5E0")).property(id, "c121_d5E0").iterate()
g.addE("has_d").from_(g.V("c121")).to(g.V("d546")).property(id, "c121_d546").iterate()
g.addE("has_d").from_(g.V("c121")).to(g.V("dDE5")).property(id, "c121_dDE5").iterate()
g.addE("has_d").from_(g.V("c121")).to(g.V("dFFE")).property(id, "c121_dFFE").iterate()
g.addE("has_d").from_(g.V("c121")).to(g.V("d434")).property(id, "c121_d434").iterate()
g.addE("has_d").from_(g.V("c146")).to(g.V("dDE5")).property(id, "c146_dDE5").iterate()
g.addE("has_d").from_(g.V("c128")).to(g.V("dFFE")).property(id, "c128_dFFE").iterate()
g.addE("has_d").from_(g.V("c128")).to(g.V("d434")).property(id, "c128_d434").iterate()

海王星查询:

paths = (
    g.V('c121')
    .repeat(bothE().simplePath().otherV())
    .until(not_(bothE().simplePath()))
    .path()
    .by(valueMap(True))
    .toList()
)

for path in paths:
    for element in path:
        print(element[id], end = ' -> ')
    print('')

Gremlify图和查询可以在上面的链接中看到

结果:

ROOT VERTEX: c121

Neptune:  c121 -> c121_dDE5 -> dDE5 -> c146_dDE5 -> c146
Gremlify: c121 -> c121_dDE5 -> dDE5 -> c146_dDE5 -> c146

Neptune:  c121 -> c121_d5E0 -> d5E0 -> c139_d5E0 -> c139
Gremlify: c121 -> c121_d5E0 -> d5E0 -> c139_d5E0 -> c139 -> c139_d546 -> d546 -> c121_d546 -> c121

Neptune:  c121 -> c121_dFFE -> dFFE -> c128_dFFE -> c128
Gremlify: c121 -> c121_dFFE -> dFFE -> c128_dFFE -> c128 -> c128_d434 -> d434 -> c121_d434 -> c121

Neptune:  c121 -> c121_d434 -> d434 -> c128_d434 -> c128
Gremlify: c121 -> c121_d434 -> d434 -> c128_d434 -> c128 -> c128_dFFE -> dFFE -> c121_dFFE -> c121

Neptune:  c121 -> c121_d546 -> d546 -> c139_d546 -> c139 ->
Gremlify: c121 -> c121_d546 -> d546 -> c139_d546 -> c139 -> c139_d5E0 -> d5E0 -> c121_d5E0 -> c121

ROOT VERTEX: c139

Neptune:  c139 -> c139_d546 -> d546 -> c121_d546 -> c121
Gremlify: c139 -> c139_d546 -> d546 -> c121_d546 -> c121 -> c121_d5E0 -> d5E0 -> c139_d5E0 -> c139

Neptune:  c139 -> c139_d546 -> d546 -> c121_d546 -> c121
Gremlify: c139 -> c139_d546 -> d546 -> c121_d546 -> c121 -> c121_dDE5 -> dDE5 -> c146_dDE5 -> c146

Neptune:  c139 -> c139_d5E0 -> d5E0 -> c121_d5E0 -> c121
Gremlify: c139 -> c139_d5E0 -> d5E0 -> c121_d5E0 -> c121 -> c121_d546 -> d546 -> c139_d546 -> c139

Neptune:  c139 -> c139_d5E0 -> d5E0 -> c121_d5E0 -> c121
Gremlify: c139 -> c139_d5E0 -> d5E0 -> c121_d5E0 -> c121 -> c121_dDE5 -> dDE5 -> c146_dDE5 -> c146

Neptune:  c139 -> c139_d546 -> d546 -> c121_d546 -> c121 -> c121_dFFE -> dFFE
Gremlify: c139 -> c139_d546 -> d546 -> c121_d546 -> c121 -> c121_dFFE -> dFFE -> c128_dFFE -> c128 -> c128_d434 -> d434 -> c121_d434 -> c121

Neptune:  c139 -> c139_d546 -> d546 -> c121_d546 -> c121 -> c121_d434 -> d434
Gremlify: c139 -> c139_d546 -> d546 -> c121_d546 -> c121 -> c121_d434 -> d434 -> c128_d434 -> c128 -> c128_dFFE -> dFFE -> c121_dFFE -> c121

Neptune:  c139 -> c139_d5E0 -> d5E0 -> c121_d5E0 -> c121 -> c121_dFFE -> dFFE
Gremlify: c139 -> c139_d5E0 -> d5E0 -> c121_d5E0 -> c121 -> c121_dFFE -> dFFE -> c128_dFFE -> c128 -> c128_d434 -> d434 -> c121_d434 -> c121

Neptune:  c139 -> c139_d5E0 -> d5E0 -> c121_d5E0 -> c121 -> c121_d434 -> d434
Gremlify: c139 -> c139_d5E0 -> d5E0 -> c121_d5E0 -> c121 -> c121_d434 -> d434 -> c128_d434 -> c128 -> c128_dFFE -> dFFE -> c121_dFFE -> c121

为什么我会看到这些不同的结果?我在Neptune上的Python查询如何实现在Gremlify中获得的预期结果


Tags: idpropertyneptuneiteratec121added5e0d434
1条回答
网友
1楼 · 发布于 2024-06-16 13:24:17

谢谢这里的细节。海王星将进行离线调查,但作为解决办法,请尝试:

g.V("c121")
.repeat(
    union(
        outE().simplePath().inV(),
        inE().simplePath().outV()
    )
)
.until(not(bothE().simplePath()))
.path().by(valueMap(True))
.toList()

相关问题 更多 >