一、启动JanusGraph
在命令行输入./bin/gremlin.sh
启动JanusGraph
使用hbase-es作为数据库和检索:
二、加载数据
加载众神数据集g=GraphOfTheGodsFactory.load(graph)
注:上面这种做法是一个官方demo,若使用已有的图数据库,在连接图数据后使用g = graph.traversal()
即可
加载的数据如下:
三、gremlin基本用法
-
V()
:查询顶点(也就是实体或者节点),一般作为图查询的第1步,后面可以续接的语句种类繁多(后续会一一讲解)
在JanusGraph中为了查询效率,会给每一个顶点赋予一个index,其实大部分图数据库都是这么做的
根据id查找顶点:
g.V(8360)
使用属性值对实体进行筛选
g.V().has('name', 'alcmene')
查询图中所有的边:
g.E()
查看name属性为alcmene的顶点
- 获取所有顶点的id:g.V().id()
- 获取所有属性的label也就是type:
g.V().label()
- 查询所有顶点的属性:
g.V().properties()
查询所有顶点的lang属性,无“lang”属性的顶点将跳过:
g.V().properties('lang')
查询所有顶点的属性名称:
g.V().properties().key()
- 查询所有顶点的属性值:
g.V().properties().value()
- 获取顶点、边的属性:
g.V().valueMap()
valueMap()与 properties()不同的地方是:它们返回的结构不一样,后者将所有的属性扁平化到一个大列表里面,一个元素代表一个属性;前者保持一个顶点或一条边的属性作为一组,每一组由若干属性的键值对组成。
类似的,通过g.E().valueMap()查询所有边的属性
- out():访问顶点的OUT方向邻接点
查找和节点id为12360,out方向的关系名为lives的节点
- in 类似out,只是方向相反
查找和节点id为12360,in方向的关系名为pet的节点
12.访问和节点12360有关系的所有节点: both
- outE,inE,bothE作用和上面相同,只是这里返回的是边
g.V('12456').outE()
==>e[4r9-9m0-b2t-9jc][12456-lives->12360]
- outV、inV、bothV作用和上面也差不多,只是这个需要在边(关系)的基础上返回相应的节点
15、伙伴节点 outE().otherV()等价于out(),inE().otherV()等价于in()
上面的所用操作都可以拼接查询,这样就可以多跳查询