如何在gremlin中进行遍历相交
假设我有两个匿名遍历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],这是遍历结果的一部分 如何找到这些结果的交集 我试着做:如何在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
__.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'))
我在这里试了两种: