HugeGraph&Gremlin 常用语句汇总

1、Schema

1、属性

schema.propertyKey("name").asText().valueSingle().ifNotExist().create();

允许定义的约束信息包括:name,datatype,cardinality,userdata;

userdata 是用户可以添加的附加属性。

2、顶点

// 使用 Automatic 的 Id 策略
schema.vertexLabel("person").properties("name", "age").ifNotExist().create();
schema.vertexLabel("person").useAutomaticId().properties("name", "age").ifNotExist().create();

// 使用 Customize_String 的 Id 策略
schema.vertexLabel("person").useCustomizeStringId().properties("name", "age").ifNotExist().create();
// 使用 Customize_Number 的 Id 策略
schema.vertexLabel("person").useCustomizeNumberId().properties("name", "age").ifNotExist().create();

// 使用 PrimaryKey 的 Id 策略
schema.vertexLabel("person").properties("name", "age").primaryKeys("name").ifNotExist().create();
schema.vertexLabel("person").usePrimaryKeyId().properties("name", "age").primaryKeys("name").ifNotExist().create();

// 删除节点
schema.vertexLabel("person").remove();

// 获取VertexLabel对象
schema.getVertexLabel("name")

// 获取property key属性
schema.getVertexLabel("person").idStrategy()
schema.getVertexLabel("person").primaryKeys()
schema.getVertexLabel("person").name()
schema.getVertexLabel("person").properties()
schema.getVertexLabel("person").nullableKeys()
schema.getVertexLabel("person").userdata()

允许定义的约束信息包括:name,idStrategy,properties, primaryKeys, nullableKeys

3、边

允许定义的约束信息包括:name,sourceLabel,targetLabel,frequency,properties,sortKeys,和 nullableKeys。

frequency 表示两个顶点间某个关系可能出现的次数,singleTime() 或 multiTimes(),比如进程之间的连接可以为多个。


// 创建边
schema.edgeLabel("knows").link("person", "person").properties("date").ifNotExist().create();
schema.edgeLabel("created").multiTimes().link("person", "software")
	.properties("date").sortKeys("date").ifNotExist().create();

// 删除边
schema.edgeLabel("knows").remove();

// 获取EdgeLabel对象
schema.getEdgeLabel("knows")

// 获取property key属性
schema.getEdgeLabel("knows").frequency()
schema.getEdgeLabel("knows").sourceLabel()
schema.getEdgeLabel("knows").targetLabel()
schema.getEdgeLabel("knows").sortKeys()
schema.getEdgeLabel("knows").name()
schema.getEdgeLabel("knows").properties()
schema.getEdgeLabel("knows").nullableKeys()
schema.getEdgeLabel("knows").userdata()

4、索引

允许定义的约束信息包括:name,baseType, vaseValue, indexFields, indexType。

baseType,baseValue 配合使用,用于区分是为 VertexLabel 还是 EdgeLabel 建立索引。

索引类型 说明 示例
Secondray 单个属性支持相等查询,联合索引支持前缀查询和相等查询 1. g.V().has(“city”, “北京”) 查询 city 属性为北京的节点
2. g.V().has(“city”, “北京”).has(“street”, “中关村街道”)
Range 支持数值类型的范围查询 1. g.V().has(“age”, P.gt(18))
2. 支持 gte()、lte()、lt()、eq(),between()、inside()、outside()
Search 支持全文检索的索引 g.V().has(“address”, Text.contains(“大厦”))
Shard 支持前缀匹配 + 数字范围查询的索引 g.V().has (“city”, “北京”).has(“age”, P.between(18, 30))
Unique 支持属性值唯一性约束,即可以限定属性的值不重复,允许联合索引,但不支持查询 当出现重复值时将报错
// 创建索引
schema.indexLabel("personByAge").onV("person").by("age").range().ifNotExist().create();
schema.indexLabel("createdByDate").onE("created").by("date").secondary().ifNotExist().create();
schema.indexLabel("personByLived").onE("person").by("lived").search().ifNotExist().create();
schema.indexLabel("personByCityAndAge").onV("person").by("city", "age").shard().ifNotExist().create();
schema.indexLabel("personById").onV("person").by("id").unique().ifNotExist().create();

// 删除索引
schema.indexLabel("personByAge").remove()

// 获取IndexLabel对象
schema.getIndexLabel("personByAge")

// 获取property key属性
schema.getIndexLabel("personByAge").baseType()
schema.getIndexLabel("personByAge").baseValue()
schema.getIndexLabel("personByAge").indexFields()
schema.getIndexLabel("personByAge").indexType()
schema.getIndexLabel("personByAge").name()

2、Data

1、顶点

Vertex marko = graph.addVertex("label", "person", "name", "marko", "age", 29);
Vertex lop = graph.addVertex("label", "software", "name", "lop", "lang", "java", "price", 328);
  • 添加顶点时参数的个数必须为偶数,对应属性的 (key,value) 列表;
  • 第一组参数对应 vertex label 的信息;
  • 对于非 nullableKeys 的属性,必须要赋值;
  • 调用 addVertex 方法后,顶点会立刻插入到存储系统中;

2、边

Edge knows1 = marko.addEdge("knows", vadas, "city", "Beijing");
  • 源顶点和目标顶点必须符号 EdgeLabel 中 sourceLabel 和 targetLabel 的定义,不能随意添加;

注意:当frequency为multiple时必须要设置sortKeys对应属性类型的值。

3、检索

1、查找 name = marko 的 person 是否认识 name = josh 的 person

g.V().hasLabel('person').has('name','marko').out('knows')
.hasLabel('person').has('name','josh').hasNext()

如果存在,返回结果

[true]

2、

g.V().hasLabel('person').where(outE("created").count().is(P.gte(2))).count()

3、

g.V().hasLabel('person').has('name','marko').out("knows").hasLabel("person").values("age").min()

4、查找 hercules 的祖父

g.V().hasLabel('character').has('name','hercules').out('father').out('father')

或者

g.V().hasLabel('character').has('name','hercules').repeat(__.out('father')).times(2)

5、查找 hercules 父亲的名称

g.V().hasLabel('character').has('name','hercules').out('father').value('name')

6、查找年龄大于 100 岁的人物

g.V().hasLabel('character').has('age',gt(100))

7、查找与 pluto 生活在一起的人

g.V().hasLabel('character').has('name','pluto').out('lives').in('lives').values('name')

8、Find pluto can’t be his own cohabitant

pluto = g.V().hasLabel('character').has('name', 'pluto')

g.V(pluto).out('lives').in('lives').where(is(neq(pluto)).values('name')

// use 'as'
g.V().hasLabel('character').has('name', 'pluto').as('x').out('lives').in('lives').where(neq('x')).values('name')

9、pluto 的兄弟

pluto = g.V().hasLabel('character').has('name', 'pluto').next()
// where do pluto's brothers live?
g.V(pluto).out('brother').out('lives').values('name')

// which brother lives in which place?
g.V(pluto).out('brother').as('god').out('lives').as('place').select('god','place')

// what is the name of the brother and the name of the place?
g.V(pluto).out('brother').as('god').out('lives').as('place').select('god','place').by('name')

4、Gremlin

4.1 在两个顶点之间检索

5、Traversal

什么是 traversal,模型?在两个点之间游走,起点,到终点,有四个部分组成:

  • Step:Steps are chained within a traversal.
  • Strategy: 拦截器方法,
  • SideEffects: store global information
  • Traverser

参考资料:
http://tinkerpop.apache.org/gremlin.html
https://tinkerpop.apache.org/docs/current/recipes/
http://tinkerpop.apache.org/docs/3.4.6/reference/#dsl
http://tinkerpop.apache.org/docs/current/tutorials/gremlins-anatomy/
http://kelvinlawrence.net/book/Gremlin-Graph-Guide.html#gq

你可能感兴趣的:(数据库)