如何在gremlin中进行遍历相交

如何在gremlin中进行遍历相交,gremlin,tinkerpop,tinkerpop3,Gremlin,Tinkerpop,Tinkerpop3,假设我有两个匿名遍历A和B。遍历A的结果是V[1],V[2],V[3],遍历B的结果是V[3],V[4]和V[5] A和B都在搜索不在任何单个顶点中的特性 “A”遍历搜索V[1]中的属性(x==y),V[1]连接到V[2]和V[3],这是遍历结果的一部分 “B”遍历搜索V[5]中的属性(u==w),V[5]连接到V[3]和V[4],这是遍历结果的一部分 如何找到这些结果的交集 我试着做: __.and(A, B) 但这样做的结果不是交集 例如: A=u uu.has('name','marko

假设我有两个匿名遍历A和B。遍历A的结果是V[1],V[2],V[3],遍历B的结果是V[3],V[4]和V[5]

A和B都在搜索不在任何单个顶点中的特性

“A”遍历搜索V[1]中的属性(x==y),V[1]连接到V[2]和V[3],这是遍历结果的一部分

“B”遍历搜索V[5]中的属性(u==w),V[5]连接到V[3]和V[4],这是遍历结果的一部分

如何找到这些结果的交集

我试着做:

__.and(A, B)
但这样做的结果不是交集

例如:

A=u uu.has('name','marko').out()

B=_uu.has('name','josh').out()

__.和(A,B)不正确

注:为简单起见,采用上述示例。在实际查询中,A&B相当大,每个查询中都有多个联合

我浏览了以下链接:


这里的所有建议都提供了一种进行相交的方法,前提是顶点满足此处不存在的所有条件。

因此,您可以尝试使用
groupCount
步骤进行相交:

g.V().union(
    __.has('name', 'marko').out(),
    __.has('name', 'josh').out()
).groupCount().by().unfold()
.where(select(values).is(gt(1))).select(keys)
另一种方法是使用Stephen在您提到的帖子中建议的简化查询:

g.V().has('name', 'marko').out().as('a').
V().has('name', 'josh').out().as('b').
select('a').
where('a',eq('b'))
我在这里试了两种: