Gremlin 用于遍历整个图形的小精灵查询

Gremlin 用于遍历整个图形的小精灵查询,gremlin,datastax-enterprise-graph,Gremlin,Datastax Enterprise Graph,如果给定一个顶点,可以编写一个Gremlin查询,递归地遍历连接到该节点的整个图吗 比如说, watched director user1 -------> movie_1 <------ chris nolan ^ user2------------| watched 监视的控制器 user1------>movie_1您可能会使用的一些变体来完成所需的操作(即,从起始顶点跨出任意数量的步骤)。当询

如果给定一个顶点,可以编写一个Gremlin查询,递归地遍历连接到该节点的整个图吗

比如说,

      watched           director
user1 -------> movie_1 <------ chris nolan
                 ^
user2------------|  
      watched
监视的控制器

user1------>movie_1您可能会使用的一些变体来完成所需的操作(即,从起始顶点跨出任意数量的步骤)。当询问有关Gremlin的问题时,有一个图表的Asciariat图表很好,但最好有一个简单的Gremlin脚本来创建图表本身,如下所示:

g.addV('movie').property('name','movie-1').as('m').
  addV('user').property('name','user-1').as('u1').
  addV('user').property('name','user-2').as('u2').
  addV('person').property('name','chris nolan').as('d').
  addE('watched').from('u1').to('m').
  addE('watched').from('u2').to('m').
  addE('directed').from('d').to('m').iterate()
然后,要从“movie-1”开始并遍历到任意深度,只需执行以下操作:

gremlin> g.V().has('movie','name','movie-1').
......1>   repeat(__.in()).
......2>     emit().
......3>   valueMap(true)
==>[id:2,label:user,name:[user-1]]
==>[id:4,label:user,name:[user-2]]
==>[id:6,label:person,name:[chris nolan]]
它将继续在传入边上进行遍历,直到碰到顶点而没有任何顶点为止,并发射沿途找到的所有顶点。显然,如果您的边没有全部向内移动,那么您需要更改
repeat()
中的模式以移动
这两个()
,但您需要尝试在过程中避免循环,否则
repeat()
将无限期地移动。使用可能会有所帮助,但最终循环终止的方法将由图形结构定义


请注意,这可能是一个昂贵的查询,具体取决于遍历深度。

您可能会使用的一些变体来完成所需的操作(即从起始顶点遍历任意数量的步骤)。当询问有关Gremlin的问题时,有一个图表的Asciariat图表很好,但最好有一个简单的Gremlin脚本来创建图表本身,如下所示:

g.addV('movie').property('name','movie-1').as('m').
  addV('user').property('name','user-1').as('u1').
  addV('user').property('name','user-2').as('u2').
  addV('person').property('name','chris nolan').as('d').
  addE('watched').from('u1').to('m').
  addE('watched').from('u2').to('m').
  addE('directed').from('d').to('m').iterate()
然后,要从“movie-1”开始并遍历到任意深度,只需执行以下操作:

gremlin> g.V().has('movie','name','movie-1').
......1>   repeat(__.in()).
......2>     emit().
......3>   valueMap(true)
==>[id:2,label:user,name:[user-1]]
==>[id:4,label:user,name:[user-2]]
==>[id:6,label:person,name:[chris nolan]]
它将继续在传入边上进行遍历,直到碰到顶点而没有任何顶点为止,并发射沿途找到的所有顶点。显然,如果您的边没有全部向内移动,那么您需要更改
repeat()
中的模式以移动
这两个()
,但您需要尝试在过程中避免循环,否则
repeat()
将无限期地移动。使用可能会有所帮助,但最终循环终止的方法将由图形结构定义

请注意,这可能是一个昂贵的查询,具体取决于遍历深度