使用Gremlin语句查询图
Gremlin是Apache Tinkerpop框架中使用的图遍历语言,使用Gremlin可以很方便的对图数据进行查询,进行图的修改、局部遍历和属性过滤等。
具体操作步骤如下:
- 进入图引擎编辑器页面,详细操作请参见访问图引擎编辑器。
- 在图数据查询区,单击下拉按钮,切换到Gremlin查询,输入查询语句,按“回车”键执行操作。
   图1 切换到Gremlin查询  
Gremlin查询语句
常用的查询语句如下所示:
- 点查询
    g.V().limit(100):查询所有点,但限制点的返回数量为100,也可以使用range(x, y)的算子,返回区间内的点数量。 g.V().hasLabel('movie'):查询点的label值为movie的点。 g.V('11'):查询id为11的点。   - 不推荐使用“g.V()”语法,由于点过大时,这种查询方式影响展示效果。
- 为了避免返回数据过大导致系统查询耗时过长,强烈建议您添加limit参数,并且将limit参数设置在1000以内,展示效果更佳。
 
- 边查询
    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().values('userid').limit(10):查询点的属性为userid的值(可不填参数,表示查询所有属性, 一个点每个属性一行结果,只有value,没有key)。 
- 新增点
    g.addV('user').property(id,'600').property('age','18-24'):新增点,Label为user,ID为600,age为18-24。 
- 删除点
- 新增边
    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(V('501')).to(V('502')) 分别添加点,然后新增边,边的两个点ID分别为501、502。 
- 删除边
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与开源的差异点如表1所示。
| 差异点 | 说明 | 
|---|---|
| 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。 | 
| Variables | GES graph structure不支持variables特性。 | 
| 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()
 
   
    
