5.HugeGraph快速上手
准备好 HugeGraph-server 安装包,HugeGraph-loader,HugeGraph-studio,并解压
HugeGraph 快速上手
1. 参考下载 文档,准备安装包
准备好 HugeGraph-server 安装包,HugeGraph-loader,HugeGraph-studio,并解压
2. 启动 server
- 修改 server/conf 配置文件:
a. hugegraph.properties:b. 修改 rest-server.properties(远程服务器需要修改,本机不用):
#backend=rocksdb #serializer=binary ###把默认配置修改成如下### serializer=text#restserver.url=http://127.0.0.1:8080 ###把默认配置修改成如下### restserver.url=http://服务器ip:8080 - 启动 server:
bin/start-hugegraph.sh - 通过 restfulAPI 访问:
http://localhost:8080/graphs,得到结果:{“graphs”:[“hugegraph”]}
- 或者通过 jps,查看 HugeGraphServer 是否启动成功
3. 启动 HugeGraph-studio
- 修改 hugegraph-studio.properties(远程服务器需要修改,本机不用):
hugegraph-studio.properties:
#studio.server.host=localhost #graph.server.host=localhost ###把默认配置修改成如下### studio.server.host=服务器ip graph.server.host=服务器ip - 启动 studio:
bin/hugegraph-studio.sh。注意这是前启动,如果要后台启动则:nohup bin/hugegraph-studio.sh & - 页面访问:http://localhost:8088,可以访问 HugeGraph 可视化工作台
4. HugeGraph-Studio 操作指南
4.1 使用 Gremlin 语言创建一个图
4.1.1 创建 Schema
这个例子涉及的 Schema 有三类,分别是:PropertyKey,VertexLabel 和 EdgeLabel。下面依次创建这些 Schema。
4.1.1.1 创建属性类型(PropertyKey)
将下面的语句输入到 Studio 的输入框中:
graph.schema().propertyKey("name").asText().ifNotExist().create()
graph.schema().propertyKey("age").asInt().ifNotExist().create()
graph.schema().propertyKey("city").asText().ifNotExist().create()
graph.schema().propertyKey("lang").asText().ifNotExist().create()
graph.schema().propertyKey("date").asText().ifNotExist().create()
graph.schema().propertyKey("price").asInt().ifNotExist().create()
在这里有几点需要说明
1、上述语句是groovy语言形式(类似但不是java)的gremlin语句,这些gremlin语句会被发送到HugeGraphServer上执行。
关于gremlin本身可以参考Gremlin Query Language或Tinkerpop 官网;
2、上述语句是通过graph.schema()获取到SchemaManager对象后操作元数据,通过gremlin语句操作 Schema 可参考文档HugeGraph-Client,
需要注意的是HugeGraph-Client是java语法,大体上与gremlin风格是一致的,具体的差异见文档HugeGraph-Client中的说明。
3、在HugeGraph-Studio的输入框中,用户可以直接使用两个变量graph和g,其中graph就是当前连接的图对象,可使用该对象对图做各种增删改查操作;
g是用于遍历图的一个对象,其本质就是graph.traversal(),用户可以使用该对象做各种遍历操作;
4、HugeGraph-Studio作为一个展示图的工具,主要用于做查询或遍历,而不宜做太多增删改的操作。
执行完成后,可以得到返回的数据,表明执行成功。如图所示
4.1.1.2 创建顶点类型(VertexLabel)
person = graph.schema().vertexLabel("person").properties("name", "age", "city").primaryKeys("name").ifNotExist().create()
software = graph.schema().vertexLabel("software").properties("name", "lang", "price").primaryKeys("name").ifNotExist().create()
4.1.1.2 创建边类型(EdgeLabel)
knows = graph.schema().edgeLabel("knows").sourceLabel("person").targetLabel("person").properties("date").ifNotExist().create()
created = graph.schema().edgeLabel("created").sourceLabel("person").targetLabel("software").properties("date", "city").ifNotExist().create()
4.1.2 创建顶点(Vertex)和边(Edge)
有了 Schema 后,就可以根据 Schema 创建特定的顶点和边了,这里我们定义两个 person 类型的顶点实例:marko 和 vadas,再定义两者之间的关系 knows:
marko = graph.addVertex(T.label, "person", "name", "marko", "age", 29, "city", "Beijing")
vadas = graph.addVertex(T.label, "person", "name", "vadas", "age", 27, "city", "Hongkong")
marko.addEdge("knows", vadas, "date", "20160110")
在页面中输入语句,这样我们就创建了两个顶点一条边,点击执行,结果如下图所示
4.1.3 添加更多数据到图中
marko = graph.addVertex(T.label, "person", "name", "marko", "age", 29, "city", "Beijing")
vadas = graph.addVertex(T.label, "person", "name", "vadas", "age", 27, "city", "Hongkong")
lop = graph.addVertex(T.label, "software", "name", "lop", "lang", "java", "price", 328)
josh = graph.addVertex(T.label, "person", "name", "josh", "age", 32, "city", "Beijing")
ripple = graph.addVertex(T.label, "software", "name", "ripple", "lang", "java", "price", 199)
peter = graph.addVertex(T.label, "person","name", "peter", "age", 29, "city", "Shanghai")
marko.addEdge("knows", vadas, "date", "20160110")
marko.addEdge("knows", josh, "date", "20130220")
marko.addEdge("created", lop, "date", "20171210", "city", "Shanghai")
josh.addEdge("created", ripple, "date", "20151010", "city", "Beijing")
josh.addEdge("created", lop, "date", "20171210", "city", "Beijing")
peter.addEdge("created", lop, "date", "20171210", "city", "Beijing")
4.1.4 展示图
g.V()
如下图所示
HugeGraph-Studio 不仅支持通过 graph 的方式展示数据,还支持表格和 Json 两种数据展示形式
表格展示形式
Json 展示形式
4.4 HugeGraph-Studio 样式自定义
4.4.1 自定义 VertexLabel 样式
| 属性 | 默认值 | 类型 | 说明 |
|---|---|---|---|
vis.size | 25 | number | 顶点大小 |
vis.scaling.min | 10 | number | 根据标签内容调整节点大小,优先级比 vis.size 高 |
vis.scaling.max | 30 | number | 根据标签内容调整节点大小,优先级比 vis.size 高 |
vis.shape | dot | string | 形状,包括 ellipse, circle, database, box, text,diamond, dot, star, triangle, triangleDown, hexagon, square and icon. |
vis.border | #00ccff | string | 顶点边框颜色 |
vis.background | #00ccff | string | 顶点背景颜色 |
vis.hover.border | #00ccff | string | 鼠标悬浮时,顶点边框颜色 |
vis.hover.background | #ec3112 | string | 鼠标悬浮时,顶点背景颜色 |
vis.highlight.border | #fb6a02 | string | 选中时,顶点边框颜色 |
vis.highlight.background | #fb6a02 | string | 选中时,顶点背景颜色 |
vis.font.color | #343434 | string | 顶点类型字体颜色 |
vis.font.size | 12 | string | 顶点类型字体大小 |
vis.icon.code | \uf111 | string | FontAwesome 图标编码,目前支持 4.7.5 版本的图标 |
vis.icon.color | #2B7CE9 | string | 图标颜色,优先级比 vis.background 高 |
vis.icon.size | 50 | string | icon 大小,优先级比 vis.size 高 |
示例:
graph.schema().vertexLabel("software")
.userdata("vis.size",25)
.userdata("vis.scaling.min",1)
.userdata("vis.scaling.max",10)
.userdata("vis.shape","icon")
.userdata("vis.border","#66ff33")
.userdata("vis.background","#3366ff")
.userdata("vis.hover.background","#FFB90F")
.userdata("vis.hover.border","#00EE00")
.userdata("vis.highlight.background","#7A67EE")
.userdata("vis.highlight.border","#4F4F4F")
.userdata("vis.font.color","#1C86EE")
.userdata("vis.font.size",12)
.userdata("vis.icon.code","\uf1b9")
.userdata("vis.icon.color","#8EE5EE")
.userdata("vis.icon.size",25)
.append()
