如果我有一个看起来像这样的图表:
N3->member_of->N1
N2->knows->N1
N3->likes->N2
N4->member_of->N1
N5->likes->N2
有没有办法执行单个查询来执行以下操作:
- 如果从 N3 开始将返回 N2
- 从 N4 开始的相同查询将返回 N2
- 从 N5 开始的相同查询将返回 N2
(最好是在 gremlin 中)
编辑:澄清:只要一级关系是“member_of”,我就可以进行二级连接。
最佳答案
这是一个很老的问题,但由于没有人提出 Gremlin 解决方案,所以它是:
我拿了Bobbys初始化脚本:
g = new TinkerGraph()
(1..5).each { g.addVertex(it) }
g.addEdge(g.v(3), g.v(1), "member_of")
g.addEdge(g.v(2), g.v(1), "knows")
g.addEdge(g.v(3), g.v(2), "likes")
g.addEdge(g.v(5), g.v(2), "likes")
g.addEdge(g.v(4), g.v(1), "member_of")
这是您的 Gremlin 查询:
gremlin> g.v(3).copySplit(_().out('likes'), _().out('member_of').loop('start'){true}{true}.in('knows')).exhaustMerge().dedup()
==>v[2]
gremlin> g.v(4).copySplit(_().out('likes'), _().out('member_of').loop('start'){true}{true}.in('knows')).exhaustMerge().dedup()
==>v[2]
gremlin> g.v(5).copySplit(_().out('likes'), _().out('member_of').loop('start'){true}{true}.in('knows')).exhaustMerge().dedup()
==>v[2]
干杯, 丹尼尔
关于neo4j - 这个查询在 neo4j/gremlin 中可行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11621574/