全部产品

使用http创建和遍历图

更新时间:2018-12-29 11:34:08

1. 连接到 GraphDB

要使用 CURL 连接到 GraphDB 服务,需要使用图库服务地址。”“包含连接到图库服务器地址和端口号。您可以在购买服务后的控制台上拿到。

在开始教程之前,请通过传递简单的 Gremlin 命令来验证是否可以使用“连接字符串”进行连接:

  1. curl -XPOST -d '{"gremlin" : "1+1" }' "<CONNECTION STRING>"

如果请求成功,那么 graphdb 会返回类似于以下内容的响应:

  1. {
  2. "requestId": "ee9f3c76-6198-4ae8-b1e7-bb96c855faf9",
  3. "status": {
  4. "message": "",
  5. "code": 200,
  6. "attributes": { }
  7. },
  8. "result": {
  9. "data": [
  10. 2
  11. ],
  12. "meta": { }
  13. }
  14. }

现在,您已准备好开始使用 The Graph of the Gods。

将图库服务器地址添加到教程中每个 CURL 命令的末尾。

2. 装入GraphOfTheGods示例图

要装入示例图形,您需要调用 GraphOfTheGodsFactory.load 方法,将其传递到已打开的graph,此时会为您创建模型,如下直接使用预创建的graph。

  1. curl -XPOST -d '{"gremlin": "GraphOfTheGodsFactory.load(graph);"}' "<CONNECTION STRING>"

3. 准备遍历图形

如果你直接使用默认图库,gremlin-server已为您内置了g,可直接使用

4. 遍历图形以查找 Saturn

The Graph of the Gods 图形包含名称属性的全局索引。这种索引通常是进入图形中特定点的第一步。例如,要在图形中查找“saturn”,请执行以下操作:

  1. curl -XPOST -d '{"gremlin": " def saturn=g.V(\"saturn\").next()"}'

此命令返回具有 id: saturn 的顶点。

  1. {"requestId":"ad66056a-7080-44c2-84fe-8f1389ee9ea8","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":[]}},"result":{"data":{"@type":"g:List","@value":[{"@type":"g:Vertex","@value":{"id":"saturn","label":"titan","properties":{"name":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":-1815549407},"value":"saturn","label":"name"}}],"age":[{"@type":"g:VertexProperty","@value":{"id":{"@type":"g:Int64","@value":-909355046},"value":{"@type":"g:Int32","@value":10000},"label":"age"}}]}}}]},"meta":{"@type":"g:Map","@value":[]}}}

5. 遍历图形以查找 Saturn 的子代

更进一步,定义“saturn”顶点来使用它,您可以询问哪些顶点使用指向它的“father” 边label。使用 in(“father”) 方法将选择这些传入边,并使用 values(“name”) 返回该顶点的名称属性的值。

  1. curl -XPOST -d '{"gremlin": "def saturn=g.V(\"saturn\").next(); g.V(saturn).in(\"father\").values(\"name\")"}'

查询将在图形中返回 Saturn 子代的名称,尽管只有一个子代:“jupiter”。

  1. {"requestId":"8501d628-cfc0-4d11-a032-341c63b51564","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":[]}},"result":{"data":{"@type":"g:List","@value":["jupiter"]},"meta":{"@type":"g:Map","@value":[]}}}

如果再次包含 in(“father”) 操作,那么您的遍历会将您带到 Saturn 顶点的孙代。

  1. curl -XPOST -d '{"gremlin": " def saturn=g.V(\"saturn\").next(); ;g.V(saturn).in(\"father\").in(\"father\").values(\"name\")"}'

使用此查询,您会发现 Saturn 的孙代名称是“hercules”。

  1. {"requestId":"f67e0516-2884-473a-99ee-1d4c0ce2c6d0","status":{"message":"","code":200,"attributes":{"@type":"g:Map","@value":[]}},"result":{"data":{"@type":"g:List","@value":["hercules"]},"meta":{"@type":"g:Map","@value":[]}}}

6. 遍历图形 - 顶点

在之前的步骤中,您使用了两个 in() 元素来标识 Hercules 是 Saturn 的孙子。该遍历还可以表示为循环,因为 Gremlin 可以 repeat 谓词:

  1. curl -XPOST -d '{"gremlin": "def saturn=g.V(\"saturn\")next(); def hercules=g.V(saturn).repeat(__.in(\"father\")).times(2).next()"}'

您可以执行使用 Hercules 顶点作为起点的高级操作。例如,您可以:

遍历标签为“father”和“mother”的边,并确定 Hercules 父母的“type”:

  1. curl -XPOST -d '{"gremlin": " def saturn=g.V(\"saturn\").next(); def hercules=g.V(saturn).repeat(__.in(\"father\")).times(2).next(); g.V(hercules).out(\"father\", \"mother\").label();" }'

遍历“battled”边以查看 Hercules 与谁战斗:

  1. curl -XPOST -d '{"gremlin": "def saturn=g.V(\"saturn\").next(); def hercules=g.V(saturn).repeat(__.in(\"father\")).times(2).next(); g.V(hercules).out(\"battled\").valueMap()" }'

遍历“battled”边以查看 Hercules 与谁战斗超过一次:

  1. curl -XPOST -d '{"gremlin": " def saturn=g.V(\"saturn\").next(); def hercules=g.V(saturn).repeat(__.in(\"father\")).times(2).next(); g.V(hercules).outE(\"battled\").has(\"time\", gt(1)).inV().values(\"name\")" }'