• 沒有找到結果。

操作场景

Gremlin是Apache Tinkerpop框架中使用的图遍历语言,使用Gremlin可以很方便的对 图数据进行查询,进行图的修改、局部遍历和属性过滤等。

操作步骤

步骤1 进入图引擎编辑器页面,详细操作请参见访问图引擎编辑器。

步骤2 在图数据查询区,单击下拉按钮,切换到Gremlin查询,输入查询语句,按“回车”键 执行操作。

5-15 切换到 Gremlin 查询

常用的查询语句如下所示。

● 点查询

g.V().limit(100):查询所有点,但限制点的返回数量为100,也可以使用range(x,

g.V().hasLabel('movie') :查询点的label值为'movie'的点。

g.V('11') :查询id为‘11’的点。

说明

不推荐使用“g.V()”语法,由于点过大时,这种查询方式影响展示效果。

● 边查询

g.E():查询所有边,不推荐使用,边数过大时,这种查询方式不合理,一般需要 添加过滤条件或限制返回数量。

g.E('55-81-5'):查询边id为‘55-81-5’的边。

g.E().hasLabel('rate'):查询label为‘rate’的边。

g.V('46').outE('rate'):查询点id为‘46’所有label为‘rate’的边。

● 属性查询

g.V().limit(3).valueMap():查询点的所有属性(可填参数,表示只查询该点,

一个点所有属性一行结果)。

g.V().limit(1).label():查询点的label。

g.V().limit(10).values('userid'):查询点的name属性(可不填参数,表示查询所 有属性, 一个点每个属性一行结果,只有value,没有key)。

● 新增点 – 方式1:

a = graph.addVertex(label,'user',id,'500','age','18-24'):新增点,Label为 user,ID为500,age为18-24。

– 方式2:

g.addV('user').property(id,'600').property('age','18-24'):新增点,Label为 user,ID为600,age为18-24。

● 删除点

g.V('600').drop():删除ID为600的点。

● 新增边 – 方式1:

g.addV('user').property(id,'501').property('age','18-24') g.addV('movie').property(id,'502').property('title','love')

g.addE('rate').property('Rating', '4').from(g.V('501')).to(g.V('502')) 分别添加点,然后新增边,边的两个点ID分别为501、502。

– 方式2:

graph.addVertex(label,'user',id,'501','age','18-24') graph.addVertex(label,'movie',id,'502','title','love')

a=g.V('501').next();b=g.V('502').next();((Vertex)a).addEdge('rate', (Vertex)b,'Rating', '4')

● 删除边

g.E('501-502-0').drop():删除ID为“501-502-0”的边。

----结束

Gremlin 特殊语法优化

GES集成了gremlin中的OLTP功能,并在一定程度上做了部分功能增强与strategy优 化。

● 增强版Text Predicate

g.V().has('name', Text.textSubString('xx')) Predicate 描述

textSubString 子字符串

textCISubString 忽略大小写的子字符串 textFuzzy 模糊匹配

textPrefix 前缀查询 textRegex 正则匹配

说明

在指定schema时,最好不要给属性取名为id, label, property, properties。

在进行gremlin操作时,有很多step会把结果转化为map结果。众所周知,在map结构中,

是不允许出现两个相同key。一般来说当我们向一个map中重复insert多个相同的key,其 value会被覆盖 or 该操作被取消。当我们把属性名取为id, label, property, properties,在 很多操作中,如果id与属性中的id一起返回,结果将是不完整的。

参考信息

GES服务中的Gremlin与开源的差异点如表5-4所示。

5-4 差异点

差异点 说明

Vertex and Edge

IDs Edge id是由source vertex的id,target vertex的id,以及区分重 边的index,通过‘-’字符连接,sid-tid-index。Edge id和 vertex id必须是String类型。

User Supplied

IDs 只有点id允许用户提供,不能带‘-’字符。

Vertex Property

IDs 和边的属性一样,点属性没有id,返回的id为点的id。

Vertex and Edge

Property GES的vertex 和 edge property由元数据文件定义,所以没有真 的增加以及删除property的方法,只有修改以及清除的操作,类 似property(),remove()等方法,都是修改属性的值,

property()设置的值由参数决定,remove(),会把string类属 性,变为空字符串,数字类属性变为0。List属性变为空list。

差异点 说明

Cardinality GES支持single 和list cardinality,GES的点的属性的value类型 由元数据文件定义,所以设置propety的值的时候,不会增加新 的属性,之后修改对应的定义的属性。

Transactions GES的Gremlin实现不支持显式地使用Transactions。

使用feature函数可以看到当前支持的Gremlin特性,显示false表示GES服务不支持此特 性,显示为true表示GES服务支持此特性,特性详情可参考Gremlin官网。

gremlin> graph.features()

==>FEATURES 说明

目前暂时不支持以下step命令:

● tryNext()

● explain()

● tree()

相關文件