tinkerpop / gremlin图遍历简单示例

本节将通过下面简单属性图上的示例来介绍基本的图遍历。
《tinkerpop / gremlin图遍历简单示例》

gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6] gremlin> v = g.v(1)
==>v[1]

符号v表示该元素是顶点并且1表示元素唯一标识符。要确定顶点的所有输出边,下面的语句就足够了。

gremlin> v.outE
==>e[7][1-knows->2]
==>e[9][1-created->3]
==>e[8][1-knows->4]

为了方便起见,Gremlin将输出和输入的顶点标识符与边缘标签一起打印出来。要获取这些边的顶点(称为传入顶点)的顶点,请在路径中应用另一个步骤。

gremlin> v.outE.inV
==>v[2] ==>v[3] ==>v[4]

重要的是要注意,在Gremlin中,顶点入射到边缘,而边缘入射到顶点。之后的原因在使用路径表达式中的元素属性时会变得明显。用于表示邻接选择保留的术语是如下步骤outE,inE,bothE,outV,inV,和bothV(见的Gremlin步骤)。属性图的组件在下面的示例子图中进行了图示。
《tinkerpop / gremlin图遍历简单示例》
以这种方式遍历图的过程可以无限地继续(如果图中有循环,则授予)。

gremlin> v.outE.inV.outE.inV
==>v[5]
==>v[3]
有步骤outin以及both该跳过边缘因此从顶点跳转到顶点。
gremlin> v.out.out
==>v[5] ==>v[3]

而且,可以使用Groovy的语言来重复模式。例如,前面的例子可以表示如下。

gremlin> list = [v]
gremlin> for(i in 1..2)
           list = list._().out.collect{it}
gremlin> list
==>v[5]
==>v[3]

这也可以使用该loop步骤来完成。

gremlin> v.as('x').out.loop('x'){it.loops < 3}
==>v[5]
==>v[3]

如果Gremlin图的数据结构只是一个有向图,那么输出/输入的边和输出/输入的顶点将是可以表达的限制。但是,由于顶点和边可以具有属性,因此可以在路径表达式中使用这些属性。例如,假设您想知道顶点1的名称。

gremlin> v = g.v(1)
==>v[1] gremlin> v.name
==>marko

所述name构建体表示属性键name并返回该键的值。路径的第一个部分是顶点1.因此,name顶点1的顶点是“marko”。另一个更复杂的使用顶点和边的属性的例子是确定name顶点1的顶点和顶点knows的年龄大于30年年龄,是这样表示的。

gremlin> v.outE('knows').inV.filter{it.age > 30}.name
==>josh

在该表达式中,该filter{ }步骤用于过滤路径中的前一步骤的结果(封闭过滤器)。因此,v.outE只对那些具有label“知道”的边进行过滤。关于图表,这只留下两条边。接下来,确定这两个边的头部的进入顶点,然后仅将其过滤为age属性大于30的顶点。给出该图,这仅留下顶点4.在路径表达式的最后一段中name,顶点4被选中,返回的是“乔希”。

总而言之,让我们做一个更复杂的图形遍历,使用回溯和一个在线正则表达式。

gremlin> v.out('knows').filter{it.age > 21}.as('x').name.filter{it.matches('jo.{2}|JO.{2}')}.back('x').age
==>32

当根顶点为顶点1时,该路径表达式返回顶点1知道的顶点的年龄,年龄大于21,名称为4个字符,并以“jo”或“JO”开始。虽然做作,它演示使用闭包来调用属性函数以及回溯到先前访问的顶点。

这个表达方式没有回溯就做同样的事情。提供这两者是为了展示表达同样事物的多种方式。

gremlin> v.out('knows').filter{it.age > 21 & it.name.matches('jo.{2}|JO.{2}')}.age
==>32
    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/zht245648124/article/details/78824694
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞