格雷姆林:从一组连接到另一组的所有节点中查找所有节点

时间:2019-12-27 13:59:33

标签: gremlin gremlinpython

鉴于两个Gremlin查询q1q2及其结果ri = qi.toSet(),我想在r1中找到与{{1 }}-忽略边缘标签和方向。

我当前的方法包括计算两个结果集之间的最短路径:

r2

但是,我发现Tinkerpop中的最短路径计算不适用于此目的,因为如果r1中存在节点而与r2中的任何节点没有任何连接,则结果将为空。

相反,我考虑了连接的组件,但是q1.shortestPath().with_(ShortestPath.target, q2).toList() 步骤将产生找到的所有连接的组件,因此必须过滤它们以找到满足上述要求的连接的组件。

您对我如何在gremlin-python中解决此问题有建议吗?

1 个答案:

答案 0 :(得分:0)

这是在Gremlin Python中完成您认为需要的一种方法。根据您的图形的大小和形状,这可能有效或无效。在我的测试图中,只有顶点1,2和3具有到12或13的路由。此示例仅向您展示了如何到达那里,只是至少存在一条路径(如果存在)。

>>> ids = g.V('1','2','3','99999').id().toList()
>>> ids
['1', '2', '3', '99999']
>>> ids2 = g.V('12','13').id().toList()
>>> ids2
['12', '13']

>>> g.V(ids).filter(__.repeat(__.out().simplePath()).until(__.hasId(within(ids2))).limit(1)).toList()
[v[1], v[2], v[3]]

如果您只关心任何路由,也可以使用dedup()代替simplePath()和limit()。

g.V(ids).filter(__.repeat(__.out().dedup()).until(__.hasId(within(ids2)))).toList()