获取 tinkerpop 中保存的中间节点的路径
getting path for a saved intermediate node in tinkerpop
我有一个包含层次结构的图表,其中层次结构的最低节点包含来自它的许多关系。
您可以使用以下内容创建图形结构:
n1 = g.addV('level1').property('name', 'n1').next()
n2 = g.addV('level2').property('name', 'n2').next()
n3 = g.addV('level2').property('name', 'n3').next()
n4 = g.addV('level3').property('val', 'n4').next()
n5 = g.addV('level3').property('val', 'n5').next()
g.addE('contains').from(n1).to(n2).next()
g.addE('contains').from(n1).to(n3).next()
g.addE('contains').from(n2).to(n4).next()
g.addE('contains').from(n3).to(n5).next()
n6 = g.addV('intermediate').property('name', 'n6').next()
n7 = g.addV('final').property('name', 'n7').next()
g.addE('partof').from(n6).to(n4).next()
g.addE('isa').from(n6).to(n7).next()
n8 = g.addV('intermediate').property('name', 'n8').next()
n9 = g.addV('final').property('name', 'n9').next()
g.addE('partof').from(n8).to(n4).next()
g.addE('isa').from(n8).to(n9).next()
n10 = g.addV('intermediate').property('name', 'n10').next()
n11 = g.addV('final').property('name', 'n11').next()
g.addE('partof').from(n10).to(n5).next()
g.addE('isa').from(n10).to(n11).next()
n12 = g.addV('intermediate').property('name', 'n12').next()
n13 = g.addV('final').property('name', 'n13').next()
g.addE('partof').from(n12).to(n5).next()
g.addE('isa').from(n12).to(n13).next()
我接下来使用查询来尝试获取 "level3" 节点的路径,然后继续获取 "final" 节点和项目的列表,以便我得到一个 [= "taxonomy" 的 32=],其中包含到 level3 的路径和 "final" 节点的名称。
g.V().hasLabel('level1').until(hasLabel('level3')).repeat(out('contains')).as('a').
in('partof').hasLabel('intermediate').out('isa').hasLabel('final').
project('taxonomy', 'enzyme').
by(select('a').path().by(__.label())).
by(values('name'))
==>[taxonomy:[level1,level2,level3,intermediate,final,level3],enzyme:n7]
==>[taxonomy:[level1,level2,level3,intermediate,final,level3],enzyme:n9]
==>[taxonomy:[level1,level2,level3,intermediate,final,level3],enzyme:n13]
==>[taxonomy:[level1,level2,level3,intermediate,final,level3],enzyme:n11]
在上面的查询中,我将 "level3" 节点保存为 'a',然后在项目步骤中我 select 它并获取路径。然而,该路径似乎包含额外的元素,它包括 "intermediate" 和 "final" 节点类型,然后再次返回到 level3。我的预期:
==>[taxonomy:[level1,level2,level3],enzyme:n7]
==>[taxonomy:[level1,level2,level3],enzyme:n9]
==>[taxonomy:[level1,level2,level3],enzyme:n13]
==>[taxonomy:[level1,level2,level3],enzyme:n11]
这是路径步骤的预期行为吗?有什么方法可以重新制定此查询以获得我的预期结果?
您可以使用 from
步骤或 to
步骤来修改路径的起始位置。
gremlin>
g.V().hasLabel('level1').until(hasLabel('level3')).repeat(out('contains')).as('a').
......1> in('partof').hasLabel('intermediate').out('isa').hasLabel('final').
......2> project('taxonomy', 'enzyme').
......3> by(path().from('a').by(__.label())).
......4> by(values('name'))
==>[taxonomy:[level3,intermediate,final],enzyme:n7]
==>[taxonomy:[level3,intermediate,final],enzyme:n9]
==>[taxonomy:[level3,intermediate,final],enzyme:n13]
==>[taxonomy:[level3,intermediate,final],enzyme:n11]
这是 from
替换为 to
的查询。
gremlin> g.V().hasLabel('level1').until(hasLabel('level3')).repeat(out('contains')).as('a').
......1> in('partof').hasLabel('intermediate').out('isa').hasLabel('final').
......2> project('taxonomy', 'enzyme').
......3> by(path().to('a').by(__.label())).
......4> by(values('name'))
==>[taxonomy:[level1,level2,level3],enzyme:n7]
==>[taxonomy:[level1,level2,level3],enzyme:n9]
==>[taxonomy:[level1,level2,level3],enzyme:n13]
==>[taxonomy:[level1,level2,level3],enzyme:n11]
gremlin>
我有一个包含层次结构的图表,其中层次结构的最低节点包含来自它的许多关系。
您可以使用以下内容创建图形结构:
n1 = g.addV('level1').property('name', 'n1').next()
n2 = g.addV('level2').property('name', 'n2').next()
n3 = g.addV('level2').property('name', 'n3').next()
n4 = g.addV('level3').property('val', 'n4').next()
n5 = g.addV('level3').property('val', 'n5').next()
g.addE('contains').from(n1).to(n2).next()
g.addE('contains').from(n1).to(n3).next()
g.addE('contains').from(n2).to(n4).next()
g.addE('contains').from(n3).to(n5).next()
n6 = g.addV('intermediate').property('name', 'n6').next()
n7 = g.addV('final').property('name', 'n7').next()
g.addE('partof').from(n6).to(n4).next()
g.addE('isa').from(n6).to(n7).next()
n8 = g.addV('intermediate').property('name', 'n8').next()
n9 = g.addV('final').property('name', 'n9').next()
g.addE('partof').from(n8).to(n4).next()
g.addE('isa').from(n8).to(n9).next()
n10 = g.addV('intermediate').property('name', 'n10').next()
n11 = g.addV('final').property('name', 'n11').next()
g.addE('partof').from(n10).to(n5).next()
g.addE('isa').from(n10).to(n11).next()
n12 = g.addV('intermediate').property('name', 'n12').next()
n13 = g.addV('final').property('name', 'n13').next()
g.addE('partof').from(n12).to(n5).next()
g.addE('isa').from(n12).to(n13).next()
我接下来使用查询来尝试获取 "level3" 节点的路径,然后继续获取 "final" 节点和项目的列表,以便我得到一个 [= "taxonomy" 的 32=],其中包含到 level3 的路径和 "final" 节点的名称。
g.V().hasLabel('level1').until(hasLabel('level3')).repeat(out('contains')).as('a').
in('partof').hasLabel('intermediate').out('isa').hasLabel('final').
project('taxonomy', 'enzyme').
by(select('a').path().by(__.label())).
by(values('name'))
==>[taxonomy:[level1,level2,level3,intermediate,final,level3],enzyme:n7]
==>[taxonomy:[level1,level2,level3,intermediate,final,level3],enzyme:n9]
==>[taxonomy:[level1,level2,level3,intermediate,final,level3],enzyme:n13]
==>[taxonomy:[level1,level2,level3,intermediate,final,level3],enzyme:n11]
在上面的查询中,我将 "level3" 节点保存为 'a',然后在项目步骤中我 select 它并获取路径。然而,该路径似乎包含额外的元素,它包括 "intermediate" 和 "final" 节点类型,然后再次返回到 level3。我的预期:
==>[taxonomy:[level1,level2,level3],enzyme:n7]
==>[taxonomy:[level1,level2,level3],enzyme:n9]
==>[taxonomy:[level1,level2,level3],enzyme:n13]
==>[taxonomy:[level1,level2,level3],enzyme:n11]
这是路径步骤的预期行为吗?有什么方法可以重新制定此查询以获得我的预期结果?
您可以使用 from
步骤或 to
步骤来修改路径的起始位置。
gremlin>
g.V().hasLabel('level1').until(hasLabel('level3')).repeat(out('contains')).as('a').
......1> in('partof').hasLabel('intermediate').out('isa').hasLabel('final').
......2> project('taxonomy', 'enzyme').
......3> by(path().from('a').by(__.label())).
......4> by(values('name'))
==>[taxonomy:[level3,intermediate,final],enzyme:n7]
==>[taxonomy:[level3,intermediate,final],enzyme:n9]
==>[taxonomy:[level3,intermediate,final],enzyme:n13]
==>[taxonomy:[level3,intermediate,final],enzyme:n11]
这是 from
替换为 to
的查询。
gremlin> g.V().hasLabel('level1').until(hasLabel('level3')).repeat(out('contains')).as('a').
......1> in('partof').hasLabel('intermediate').out('isa').hasLabel('final').
......2> project('taxonomy', 'enzyme').
......3> by(path().to('a').by(__.label())).
......4> by(values('name'))
==>[taxonomy:[level1,level2,level3],enzyme:n7]
==>[taxonomy:[level1,level2,level3],enzyme:n9]
==>[taxonomy:[level1,level2,level3],enzyme:n13]
==>[taxonomy:[level1,level2,level3],enzyme:n11]
gremlin>