文档 1.0 版本已不再积极维护,你当前浏览的是一份归档快照。
最新文档请参阅 最新版本。
Vertex API
2.1 Vertex
顶点类型中的 Id 策略决定了顶点的 Id 类型,其对应关系如下:
顶点的 GET/PUT/DELETE API 中 url 的 id 部分传入的应是带有类型信息的 id 值,这个类型信息用 json 串是否带引号表示,也就是说:
- 当 id 类型为 number 时,url 中的 id 不带引号,形如 xxx/vertices/123456
- 当 id 类型为 string 时,url 中的 id 带引号,形如 xxx/vertices/“123456”
接下来的示例均假设已经创建好了前述的各种 schema 信息
2.1.1 创建一个顶点
Method & Url
1POST http://localhost:8080/graphs/hugegraph/graph/vertices
Request Body
1{
2 "label": "person",
3 "properties": {
4 "name": "marko",
5 "age": 29
6 }
7}
Response Status
Response Body
1{
2 "id": "1:marko",
3 "label": "person",
4 "type": "vertex",
5 "properties": {
6 "name": [
7 {
8 "id": "1:marko>name",
9 "value": "marko"
10 }
11 ],
12 "age": [
13 {
14 "id": "1:marko>age",
15 "value": 29
16 }
17 ]
18 }
19}
2.1.2 创建多个顶点
Method & Url
1POST http://localhost:8080/graphs/hugegraph/graph/vertices/batch
Request Body
1[
2 {
3 "label": "person",
4 "properties": {
5 "name": "marko",
6 "age": 29
7 }
8 },
9 {
10 "label": "software",
11 "properties": {
12 "name": "ripple",
13 "lang": "java",
14 "price": 199
15 }
16 }
17]
Response Status
Response Body
1[
2 "1:marko",
3 "2:ripple"
4]
2.1.3 更新顶点属性
Method & Url
1PUT http://127.0.0.1:8080/graphs/hugegraph/graph/vertices/"1:marko"?action=append
Request Body
1{
2 "label": "person",
3 "properties": {
4 "age": 30,
5 "city": "Beijing"
6 }
7}
注意:属性的取值是有三种类别的,分别是single、set和list。如果是single,表示增加或更新属性值;如果是set或list,则表示追加属性值。
Response Status
Response Body
1{
2 "id": "1:marko",
3 "label": "person",
4 "type": "vertex",
5 "properties": {
6 "city": [
7 {
8 "id": "1:marko>city",
9 "value": "Beijing"
10 }
11 ],
12 "name": [
13 {
14 "id": "1:marko>name",
15 "value": "marko"
16 }
17 ],
18 "age": [
19 {
20 "id": "1:marko>age",
21 "value": 30
22 }
23 ]
24 }
25}
2.1.4 批量更新顶点属性
功能说明
批量更新顶点的属性,并支持多种更新策略,包括
- SUM: 数值累加
- BIGGER: 两个数字/日期取更大的
- SMALLER: 两个数字/日期取更小的
- UNION: Set属性取并集
- INTERSECTION: Set属性取交集
- APPEND: List属性追加元素
- ELIMINATE: List/Set属性删除元素
- OVERRIDE: 覆盖已有属性,如果新属性为null,则仍然使用旧属性
假设原顶点及属性为:
1{
2 "vertices":[
3 {
4 "id":"2:lop",
5 "label":"software",
6 "type":"vertex",
7 "properties":{
8 "name":"lop",
9 "lang":"java",
10 "price":328
11 }
12 },
13 {
14 "id":"1:josh",
15 "label":"person",
16 "type":"vertex",
17 "properties":{
18 "name":"josh",
19 "age":32,
20 "city":"Beijing",
21 "weight":0.1,
22 "hobby":[
23 "reading",
24 "football"
25 ]
26 }
27 }
28 ]
29}
Method & Url
1PUT http://127.0.0.1:8080/graphs/hugegraph/graph/vertices/batch
Request Body
1{
2 "vertices":[
3 {
4 "label":"software",
5 "type":"vertex",
6 "properties":{
7 "name":"lop",
8 "lang":"c++",
9 "price":299
10 }
11 },
12 {
13 "label":"person",
14 "type":"vertex",
15 "properties":{
16 "name":"josh",
17 "city":"Shanghai",
18 "weight":0.2,
19 "hobby":[
20 "swiming"
21 ]
22 }
23 }
24 ],
25 "update_strategies":{
26 "price":"BIGGER",
27 "age":"OVERRIDE",
28 "city":"OVERRIDE",
29 "weight":"SUM",
30 "hobby":"UNION"
31 },
32 "create_if_not_exist":true
33}
Response Status
Response Body
1{
2 "vertices": [
3 {
4 "id": "2:lop",
5 "label": "software",
6 "type": "vertex",
7 "properties": {
8 "name": "lop",
9 "lang": "c++",
10 "price": 328
11 }
12 },
13 {
14 "id": "1:josh",
15 "label": "person",
16 "type": "vertex",
17 "properties": {
18 "name": "josh",
19 "age": 32,
20 "city": "Shanghai",
21 "weight": 0.3,
22 "hobby": [
23 "swiming",
24 "reading",
25 "football"
26 ]
27 }
28 }
29 ]
30}
结果分析:
- lang 属性未指定更新策略,直接用新值覆盖旧值,无论新值是否为null;
- price 属性指定 BIGGER 的更新策略,旧属性值为328,新属性值为299,所以仍然保留了旧属性值328;
- age 属性指定 OVERRIDE 更新策略,而新属性值中未传入age,相当于age为null,所以仍然保留了原属性值32;
- city 属性也指定了 OVERRIDE 更新策略,且新属性值不为null,所以覆盖了旧值;
- weight 属性指定了 SUM 更新策略,旧属性值为0.1,新属性值为0.2,最后的值为0.3;
- hobby 属性(基数为Set)指定了 UNION 更新策略,所以新值与旧值取了并集;
其他的更新策略使用方式可以类推,不再赘述。
2.1.5 删除顶点属性
Method & Url
1PUT http://127.0.0.1:8080/graphs/hugegraph/graph/vertices/"1:marko"?action=eliminate
Request Body
1{
2 "label": "person",
3 "properties": {
4 "city": "Beijing"
5 }
6}
注意:这里会直接删除属性(删除key和所有value),无论其属性的取值是single、set或list。
Response Status
Response Body
1{
2 "id": "1:marko",
3 "label": "person",
4 "type": "vertex",
5 "properties": {
6 "name": [
7 {
8 "id": "1:marko>name",
9 "value": "marko"
10 }
11 ],
12 "age": [
13 {
14 "id": "1:marko>age",
15 "value": 30
16 }
17 ]
18 }
19}
2.1.6 获取符合条件的顶点
Params
- label: 顶点类型
- properties: 属性键值对(根据属性查询的前提是预先建立了索引)
- limit: 查询最大数目
- page: 页号
以上参数都是可选的,如果提供page参数,必须提供limit参数,不允许带其他参数。label, properties和limit可以任意组合。
属性键值对由JSON格式的属性名称和属性值组成,允许多个属性键值对作为查询条件,属性值支持精确匹配和范围匹配,精确匹配时形如properties={"age":29},范围匹配时形如properties={"age":"P.gt(29)"},范围匹配支持的表达式如下:
查询所有 age 为 20 且 label 为 person 的顶点
Method & Url
1GET http://localhost:8080/graphs/hugegraph/graph/vertices?label=person&properties={"age":29}&limit=1
Response Status
Response Body
1{
2 "vertices": [
3 {
4 "id": "1:marko",
5 "label": "person",
6 "type": "vertex",
7 "properties": {
8 "city": [
9 {
10 "id": "1:marko>city",
11 "value": "Beijing"
12 }
13 ],
14 "name": [
15 {
16 "id": "1:marko>name",
17 "value": "marko"
18 }
19 ],
20 "age": [
21 {
22 "id": "1:marko>age",
23 "value": 29
24 }
25 ]
26 }
27 }
28 ]
29}
分页查询所有顶点,获取第一页(page不带参数值),限定3条
Method & Url
1GET http://localhost:8080/graphs/hugegraph/graph/vertices?page&limit=3
Response Status
Response Body
1{
2 "vertices": [{
3 "id": "2:ripple",
4 "label": "software",
5 "type": "vertex",
6 "properties": {
7 "price": [{
8 "id": "2:ripple>price",
9 "value": 199
10 }],
11 "name": [{
12 "id": "2:ripple>name",
13 "value": "ripple"
14 }],
15 "lang": [{
16 "id": "2:ripple>lang",
17 "value": "java"
18 }]
19 }
20 },
21 {
22 "id": "1:vadas",
23 "label": "person",
24 "type": "vertex",
25 "properties": {
26 "city": [{
27 "id": "1:vadas>city",
28 "value": "Hongkong"
29 }],
30 "name": [{
31 "id": "1:vadas>name",
32 "value": "vadas"
33 }],
34 "age": [{
35 "id": "1:vadas>age",
36 "value": 27
37 }]
38 }
39 },
40 {
41 "id": "1:peter",
42 "label": "person",
43 "type": "vertex",
44 "properties": {
45 "city": [{
46 "id": "1:peter>city",
47 "value": "Shanghai"
48 }],
49 "name": [{
50 "id": "1:peter>name",
51 "value": "peter"
52 }],
53 "age": [{
54 "id": "1:peter>age",
55 "value": 35
56 }]
57 }
58 }
59 ],
60 "page": "001000100853313a706574657200f07ffffffc00e797c6349be736fffc8699e8a502efe10004"
61}
返回的body里面是带有下一页的页号信息的,"page": "001000100853313a706574657200f07ffffffc00e797c6349be736fffc8699e8a502efe10004",
在查询下一页的时候将该值赋给page参数。
分页查询所有顶点,获取下一页(page带上上一页返回的page值),限定3条
Method & Url
1GET http://localhost:8080/graphs/hugegraph/graph/vertices?page=001000100853313a706574657200f07ffffffc00e797c6349be736fffc8699e8a502efe10004&limit=3
Response Status
Response Body
1{
2 "vertices": [{
3 "id": "1:josh",
4 "label": "person",
5 "type": "vertex",
6 "properties": {
7 "city": [{
8 "id": "1:josh>city",
9 "value": "Beijing"
10 }],
11 "name": [{
12 "id": "1:josh>name",
13 "value": "josh"
14 }],
15 "age": [{
16 "id": "1:josh>age",
17 "value": 32
18 }]
19 }
20 },
21 {
22 "id": "1:marko",
23 "label": "person",
24 "type": "vertex",
25 "properties": {
26 "city": [{
27 "id": "1:marko>city",
28 "value": "Beijing"
29 }],
30 "name": [{
31 "id": "1:marko>name",
32 "value": "marko"
33 }],
34 "age": [{
35 "id": "1:marko>age",
36 "value": 29
37 }]
38 }
39 },
40 {
41 "id": "2:lop",
42 "label": "software",
43 "type": "vertex",
44 "properties": {
45 "price": [{
46 "id": "2:lop>price",
47 "value": 328
48 }],
49 "name": [{
50 "id": "2:lop>name",
51 "value": "lop"
52 }],
53 "lang": [{
54 "id": "2:lop>lang",
55 "value": "java"
56 }]
57 }
58 }
59 ],
60 "page": null
61}
此时"page": null表示已经没有下一页了 (注: 后端为 Cassandra 时,为了性能考虑,返回页恰好为最后一页时,返回 page 值可能非空,通过该 page 再请求下一页数据时则返回 空数据 及 page = null,其他情况类似)
2.1.7 根据Id获取顶点
Method & Url
1GET http://localhost:8080/graphs/hugegraph/graph/vertices/"1:marko"
Response Status
Response Body
1{
2 "id": "1:marko",
3 "label": "person",
4 "type": "vertex",
5 "properties": {
6 "name": [
7 {
8 "id": "1:marko>name",
9 "value": "marko"
10 }
11 ],
12 "age": [
13 {
14 "id": "1:marko>age",
15 "value": 29
16 }
17 ]
18 }
19}
2.1.8 根据Id删除顶点
Params
仅根据Id删除顶点
Method & Url
1DELETE http://localhost:8080/graphs/hugegraph/graph/vertices/"1:marko"
Response Status
根据Label+Id删除顶点
通过指定Label参数和Id来删除顶点时,一般来说其性能比仅根据Id删除会更好。
Method & Url
1DELETE http://localhost:8080/graphs/hugegraph/graph/vertices/"1:marko"?label=person
Response Status