【发布时间】:2014-09-20 04:33:02
【问题描述】:
我正在尝试在图表上进行复杂的查询,并且成功地做到了。在该查询中输出的顶点也有一些别名顶点通过别名关系连接到这些顶点。
现在我希望输出所有先前的顶点及其别名顶点,但我可以做一个/或(原始顶点或每个顶点的别名顶点)。
如果有人知道一种方法来输出特定顶点的相邻顶点并在同一查询中输出该顶点,我认为我的问题将得到解决。
有什么建议吗?
【问题讨论】:
我正在尝试在图表上进行复杂的查询,并且成功地做到了。在该查询中输出的顶点也有一些别名顶点通过别名关系连接到这些顶点。
现在我希望输出所有先前的顶点及其别名顶点,但我可以做一个/或(原始顶点或每个顶点的别名顶点)。
如果有人知道一种方法来输出特定顶点的相邻顶点并在同一查询中输出该顶点,我认为我的问题将得到解决。
有什么建议吗?
【问题讨论】:
让我们考虑以下示例:
[AliasUser1] [ItemA] [别名用户2]
使用以下代码:
result = [] as Set;
user1.out('likes') // we are at ItemA
.in('likes') // we are at User2 but also back at User1
.store(result) // store the users vertices
.out('alias') // we are at the alias vertices
.store(result) // store the alias vertices
.iterate() // run
你得到:
gremlin> result.name
==>User2
==>AliasOfUser2
==>User1
==>AliasOfUser1
所以我猜store 是解决您的问题的关键。
以下示例图:
g = new TinkerGraph()
user1 = g.addVertex()
user1.name ='User1'
user2 = g.addVertex()
user2.name ='User2'
itemA = g.addVertex()
itemA.name ='ItemA'
myAlias1 = g.addVertex()
myAlias1.name ='AliasOfUser1'
myAlias2 = g.addVertex()
myAlias2.name ='AliasOfUser2'
g.addEdge(user1, itemA, 'likes')
g.addEdge(user2, itemA, 'likes')
g.addEdge(user1, myAlias1, 'alias')
g.addEdge(user2, myAlias2, 'alias')
【讨论】: