跳转到主要内容

文档 1.0 版本已不再积极维护,你当前浏览的是一份归档快照。 最新文档请参阅 最新版本。

Edge API

2.2 Edge

顶点 id 格式的修改也影响到了边的 Id 以及源顶点和目标顶点 id 的格式。

EdgeId是由 src-vertex-id + direction + label + sort-values + tgt-vertex-id 拼接而成, 但是这里的顶点id类型不是通过引号区分的,而是根据前缀区分:

  • 当 id 类型为 number 时,EdgeId 的顶点 id 前有一个前缀L ,形如 “L123456>1»L987654”
  • 当 id 类型为 string 时,EdgeId 的顶点 id 前有一个前缀S ,形如 “S1:peter>1»S2:lop”

接下来的示例均假设已经创建好了前述的各种schema和vertex信息

2.2.1 创建一条边

Params说明

  • label:边类型名称,必填
  • outV:源顶点id,必填
  • inV:目标顶点id,必填
  • outVLabel:源顶点类型。必填
  • inVLabel:目标顶点类型。必填
  • properties: 边关联的属性,对象内部结构为:
    1. name:属性名称
    2. value:属性值
Method & Url
1POST http://localhost:8080/graphs/hugegraph/graph/edges
Request Body
 1{
 2    "label": "created",
 3    "outV": "1:peter",
 4    "inV": "2:lop",
 5    "outVLabel": "person",
 6    "inVLabel": "software",
 7    "properties": {
 8        "date": "2017-5-18",
 9        "weight": 0.2
10    }
11}
Response Status
1201
Response Body
 1{
 2    "id": "S1:peter>1>>S2:lop",
 3    "label": "created",
 4    "type": "edge",
 5    "inVLabel": "software",
 6    "outVLabel": "person",
 7    "inV": "2:lop",
 8    "outV": "1:peter",
 9    "properties": {
10        "date": "2017-5-18",
11        "weight": 0.2
12    }
13}

2.2.2 创建多条边

Params
  • check_vertex: 是否检查顶点存在(true | false),当设置为 true 而待插入边的源顶点或目标顶点不存在时会报错。
Method & Url
1POST http://localhost:8080/graphs/hugegraph/graph/edges/batch
Request Body
 1[
 2    {
 3        "label": "created",
 4        "outV": "1:peter",
 5        "inV": "2:lop",
 6        "outVLabel": "person",
 7        "inVLabel": "software",
 8        "properties": {
 9            "date": "2017-5-18",
10            "weight": 0.2
11        }
12    },
13    {
14        "label": "knows",
15        "outV": "1:marko",
16        "inV": "1:vadas",
17        "outVLabel": "person",
18        "inVLabel": "person",
19        "properties": {
20            "date": "2016-01-10",
21            "weight": 0.5
22        }
23    }
24]
Response Status
1201
Response Body
1[
2    "S1:peter>1>>S2:lop",
3    "S1:marko>2>>S1:vadas"
4]

2.2.3 更新边属性

Method & Url
1PUT http://localhost:8080/graphs/hugegraph/graph/edges/S1:peter>1>>S2:lop?action=append
Request Body
1{
2    "properties": {
3        "weight": 1.0
4    }
5}

注意:属性的取值是有三种类别的,分别是single、set和list。如果是single,表示增加或更新属性值;如果是set或list,则表示追加属性值。

Response Status
1200
Response Body
 1{
 2    "id": "S1:peter>1>>S2:lop",
 3    "label": "created",
 4    "type": "edge",
 5    "inVLabel": "software",
 6    "outVLabel": "person",
 7    "inV": "2:lop",
 8    "outV": "1:peter",
 9    "properties": {
10        "date": "2017-5-18",
11        "weight": 1
12    }
13}

2.2.4 批量更新边属性

功能说明

与批量更新顶点属性类似

假设原边及属性为:

 1{
 2    "edges":[
 3        {
 4            "id":"S1:josh>2>>S2:ripple",
 5            "label":"created",
 6            "type":"edge",
 7            "outV":"1:josh",
 8            "outVLabel":"person",
 9            "inV":"2:ripple",
10            "inVLabel":"software",
11            "properties":{
12                "weight":1,
13                "date":1512835200000
14            }
15        },
16        {
17            "id":"S1:marko>1>7JooBil0>S1:josh",
18            "label":"knows",
19            "type":"edge",
20            "outV":"1:marko",
21            "outVLabel":"person",
22            "inV":"1:josh",
23            "inVLabel":"person",
24            "properties":{
25                "weight":1,
26                "date":1361289600000
27            }
28        }
29    ]
30}
Method & Url
1PUT http://127.0.0.1:8080/graphs/hugegraph/graph/edges/batch
Request Body
 1{
 2    "edges":[
 3        {
 4            "id":"S1:josh>2>>S2:ripple",
 5            "label":"created",
 6            "outV":"1:josh",
 7            "outVLabel":"person",
 8            "inV":"2:ripple",
 9            "inVLabel":"software",
10            "properties":{
11                "weight":0.1,
12                "date":1522835200000
13            }
14        },
15        {
16            "id":"S1:marko>1>7JooBil0>S1:josh",
17            "label":"knows",
18            "outV":"1:marko",
19            "outVLabel":"person",
20            "inV":"1:josh",
21            "inVLabel":"person",
22            "properties":{
23                "weight":0.2,
24                "date":1301289600000
25            }
26        }
27    ],
28    "update_strategies":{
29        "weight":"SUM",
30        "date":"BIGGER"
31    },
32    "check_vertex": false,
33    "create_if_not_exist":true
34}
Response Status
1200
Response Body
 1{
 2    "edges":[
 3        {
 4            "id":"S1:josh>2>>S2:ripple",
 5            "label":"created",
 6            "type":"edge",
 7            "outV":"1:josh",
 8            "outVLabel":"person",
 9            "inV":"2:ripple",
10            "inVLabel":"software",
11            "properties":{
12                "weight":1.1,
13                "date":1522835200000
14            }
15        },
16        {
17            "id":"S1:marko>1>7JooBil0>S1:josh",
18            "label":"knows",
19            "type":"edge",
20            "outV":"1:marko",
21            "outVLabel":"person",
22            "inV":"1:josh",
23            "inVLabel":"person",
24            "properties":{
25                "weight":1.2,
26                "date":1301289600000
27            }
28        }
29    ]
30}

2.2.5 删除边属性

Method & Url
1PUT http://localhost:8080/graphs/hugegraph/graph/edges/S1:peter>1>>S2:lop?action=eliminate
Request Body
1{
2    "properties": {
3        "weight": 1.0
4    }
5}

注意:这里会直接删除属性(删除key和所有value),无论其属性的取值是single、set或list。

Response Status
1200
Response Body
 1{
 2    "id": "S1:peter>1>>S2:lop",
 3    "label": "created",
 4    "type": "edge",
 5    "inVLabel": "software",
 6    "outVLabel": "person",
 7    "inV": "2:lop",
 8    "outV": "1:peter",
 9    "properties": {
10        "date": "20170324"
11    }
12}

2.2.6 获取符合条件的边

Params
  • vertex_id: 顶点id
  • direction: 边的方向(OUT | IN | BOTH)
  • label: 边的标签
  • properties: 属性键值对(根据属性查询的前提是预先建立了索引)
  • offset:偏移,默认为0
  • limit: 查询数目,默认为100
  • page: 页号

支持的查询有以下几种:

  • 提供vertex_id参数时,不可以使用参数page,direction、label、properties可选,offset和limit可以 限制结果范围
  • 不提供vertex_id参数时,label和properties可选
    • 如果使用page参数,则:offset参数不可用(不填或者为0),direction不可用,properties最多只能有一个
    • 如果不使用page参数,则:offset和limit可以用来限制结果范围,direction参数忽略

属性键值对由JSON格式的属性名称和属性值组成,允许多个属性键值对作为查询条件,属性值支持精确匹配和范围匹配,精确匹配时形如properties={"weight":0.8},范围匹配时形如properties={"age":"P.gt(0.8)"},范围匹配支持的表达式如下:

表达式说明
P.eq(number)属性值等于number的边
P.neq(number)属性值不等于number的边
P.lt(number)属性值小于number的边
P.lte(number)属性值小于等于number的边
P.gt(number)属性值大于number的边
P.gte(number)属性值大于等于number的边
P.between(number1,number2)属性值大于等于number1且小于number2的边
P.inside(number1,number2)属性值大于number1且小于number2的边
P.outside(number1,number2)属性值小于number1且大于number2的边
P.within(value1,value2,value3,…)属性值等于任何一个给定value的边

查询与顶点 person:josh(vertex_id=“1:josh”) 相连且 label 为 created 的边

Method & Url
1GET http://127.0.0.1:8080/graphs/hugegraph/graph/edges?vertex_id="1:josh"&direction=BOTH&label=created&properties={}
Response Status
1200
Response Body
 1{
 2    "edges": [
 3        {
 4            "id": "S1:josh>1>>S2:lop",
 5            "label": "created",
 6            "type": "edge",
 7            "inVLabel": "software",
 8            "outVLabel": "person",
 9            "inV": "2:lop",
10            "outV": "1:josh",
11            "properties": {
12                "date": "20091111",
13                "weight": 0.4
14            }
15        },
16        {
17            "id": "S1:josh>1>>S2:ripple",
18            "label": "created",
19            "type": "edge",
20            "inVLabel": "software",
21            "outVLabel": "person",
22            "inV": "2:ripple",
23            "outV": "1:josh",
24            "properties": {
25                "date": "20171210",
26                "weight": 1
27            }
28        }
29    ]
30}

分页查询所有边,获取第一页(page不带参数值),限定3条

Method & Url
1GET http://127.0.0.1:8080/graphs/hugegraph/graph/edges?page&limit=3
Response Status
1200
Response Body
 1{
 2	"edges": [{
 3			"id": "S1:peter>2>>S2:lop",
 4			"label": "created",
 5			"type": "edge",
 6			"inVLabel": "software",
 7			"outVLabel": "person",
 8			"inV": "2:lop",
 9			"outV": "1:peter",
10			"properties": {
11				"weight": 0.2,
12				"date": "20170324"
13			}
14		},
15		{
16			"id": "S1:josh>2>>S2:lop",
17			"label": "created",
18			"type": "edge",
19			"inVLabel": "software",
20			"outVLabel": "person",
21			"inV": "2:lop",
22			"outV": "1:josh",
23			"properties": {
24				"weight": 0.4,
25				"date": "20091111"
26			}
27		},
28		{
29			"id": "S1:josh>2>>S2:ripple",
30			"label": "created",
31			"type": "edge",
32			"inVLabel": "software",
33			"outVLabel": "person",
34			"inV": "2:ripple",
35			"outV": "1:josh",
36			"properties": {
37				"weight": 1,
38				"date": "20171210"
39			}
40		}
41	],
42	"page": "002500100753313a6a6f73681210010004000000020953323a726970706c65f07ffffffcf07ffffffd8460d63f4b398dd2721ed4fdb7716b420004"
43}

返回的body里面是带有下一页的页号信息的,"page": "002500100753313a6a6f73681210010004000000020953323a726970706c65f07ffffffcf07ffffffd8460d63f4b398dd2721ed4fdb7716b420004", 在查询下一页的时候将该值赋给page参数。

分页查询所有边,获取下一页(page带上上一页返回的page值),限定3条

Method & Url
1GET http://127.0.0.1:8080/graphs/hugegraph/graph/edges?page=002500100753313a6a6f73681210010004000000020953323a726970706c65f07ffffffcf07ffffffd8460d63f4b398dd2721ed4fdb7716b420004&limit=3
Response Status
1200
Response Body
 1{
 2	"edges": [{
 3			"id": "S1:marko>1>20130220>S1:josh",
 4			"label": "knows",
 5			"type": "edge",
 6			"inVLabel": "person",
 7			"outVLabel": "person",
 8			"inV": "1:josh",
 9			"outV": "1:marko",
10			"properties": {
11				"weight": 1,
12				"date": "20130220"
13			}
14		},
15		{
16			"id": "S1:marko>1>20160110>S1:vadas",
17			"label": "knows",
18			"type": "edge",
19			"inVLabel": "person",
20			"outVLabel": "person",
21			"inV": "1:vadas",
22			"outV": "1:marko",
23			"properties": {
24				"weight": 0.5,
25				"date": "20160110"
26			}
27		},
28		{
29			"id": "S1:marko>2>>S2:lop",
30			"label": "created",
31			"type": "edge",
32			"inVLabel": "software",
33			"outVLabel": "person",
34			"inV": "2:lop",
35			"outV": "1:marko",
36			"properties": {
37				"weight": 0.4,
38				"date": "20171210"
39			}
40		}
41	],
42	"page": null
43}

此时"page": null表示已经没有下一页了 (注: 后端为 Cassandra 时,为了性能考虑,返回页恰好为最后一页时,返回 page 值可能非空,通过该 page 再请求下一页数据时则返回 空数据 及 page = null,其他情况类似)

2.2.7 根据Id获取边

Method & Url
1GET http://localhost:8080/graphs/hugegraph/graph/edges/S1:peter>1>>S2:lop
Response Status
1200
Response Body
 1{
 2    "id": "S1:peter>1>>S2:lop",
 3    "label": "created",
 4    "type": "edge",
 5    "inVLabel": "software",
 6    "outVLabel": "person",
 7    "inV": "2:lop",
 8    "outV": "1:peter",
 9    "properties": {
10        "date": "2017-5-18",
11        "weight": 0.2
12    }
13}

2.2.8 根据Id删除边

Params
  • label: 边类型,可选参数

仅根据Id删除边

Method & Url
1DELETE http://localhost:8080/graphs/hugegraph/graph/edges/S1:peter>1>>S2:lop
Response Status
1204

根据Label+Id删除边

通过指定Label参数和Id来删除边时,一般来说其性能比仅根据Id删除会更好。

Method & Url
1DELETE http://localhost:8080/graphs/hugegraph/graph/edges/S1:peter>1>>S2:lop?label=person
Response Status
1204