【发布时间】:2020-09-15 10:39:37
【问题描述】:
我正在尝试编写一个查询来检索从指定顶点可到达的所有路径。换句话说,我正在尝试检索顶点连接到的整个集群/子图。查询的更多限制是:
- 应遍历内边并将其包含在结果中(我正在寻找所有以任何方式连接到根顶点的路径。
- 搜索必须停止在指定的深度,例如,距离目标 10 跳 根顶点。
- 额外限制:我希望结果不包含作为结果中返回的其他路径的完整子路径的路径。
我目前有以下两个查询,它们似乎可以在我测试过的小型玩具图上正常工作。但是,在我们的大型生产图中似乎有一些边缘情况并没有返回我期望的所有路径/边缘/顶点,但我无法解释为什么会发生这种情况。这两个查询有时也会返回一些不同的顶点。
我希望对如何处理此查询有一个全新的看法,而不是尝试调整我目前拥有的内容,因此请先尝试提供解决方案,然后再查看下面我当前的解决方案。
查询 1:
g.V(uid).repeat(bothE().bothV().simplePath()).until(loops().is_(10)).emit().dedup().path().by(valueMap (真))
查询 2:
g.V(uid).repeat(bothE().bothV().simplePath()).until(bothE().simplePath().count().is_(0).or_().loops()。 is_(10)).dedup().path().by(valueMap(True))
【问题讨论】:
-
您是要恢复所有路径(包含重复顶点)还是实际的子图结构?
-
我愿意。 “子图结构”到底是什么意思?您是否打算使用实际的 Gremlin
.subgraph()函数? -
Gremlin 有一个
subgraph步骤,它将返回查询访问的子图 yes - 因此作为path的替代方案,如果您想排除任何部分,您可以选择返回子图路径重复。 -
您能否提供一个查询来确保返回所有可到达的边/顶点?
-
我在下面添加了一个答案,显示了
path和subgraph的示例
标签: graph gremlin amazon-neptune