Repeat-query API
功能介绍
该接口用于按某些退出条件来循环执行遍历查询。
例如以下gremlin语句:
g.V('a','b').repeat(out('c')).times(2).emit().path()
g.V('label_1').repeat(out('label_2')).emit() URL
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| project_id | 是 | String | 项目ID。获取方法请参见获取项目ID。 |
| graph_name | 是 | String | 图名称。 |
请求参数
每层traversal的元素个数不超过1亿。
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| executionMode | 否 | String | sync:同步async:异步默认为“async ”异步返回。 |
| vertices | 是 | Array of Json | 查询的起始节点ID列表。 |
| edges | 否 | Array of Json | 查询的起始边列表,与vertices二选一,具体格式见表 edges元素格式。 |
| repeat | 是 | Array of Json | 执行repeat的过滤条件列表,数组的每个元素分别对应每一层要做的查询和过滤条件。具体格式见表 repeat元素格式。 |
| until | 否 | Array of Json | while/do looping模式。用于中止遍历过滤条件列表,数组的每个元素分别对应repeat中每一层要进行终止的条件,且filter类型需要与repeat每层一致,如第一层均为vertex_filter。具体格式见表 until元素格式。 |
| times | 否 | Integer | 用于限制最长步数。默认值为5,最大值为20。 |
| query_type | 否 | String | 可选:['Default',SimpleSubgraph','SimpleEdges',‘Path’]
|
| emit | 否 | Boolean | 是否返回所有元素。默认为true。当前仅支持query_type=Default模式。 |
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| source | 是 | String | 源节点ID。 |
| target | 是 | String | 目标节点ID。 |
| index | 是 | String | 此边在源节点边集合中的索引。 |
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| operator | 是 | String | 表示要做的查询类型,可选的值有:inV:入点outV:出点 bothV:入点。 |
| vertex_filter | 否 | Json String | 作用在下一条的点上,具体格式见表 property_filter元素格式。 |
| edge_filter | 否 | Json String | 作用在点到点之间的边,具体格式见表 property_filter元素格式。 |
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| vertex_filter | 否 | Json String | 在repeat 的operator为“ inV”或“outV”或“bothV”时可选,具体格式见表 property_filter元素格式。 |
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| leftvalue | 否 | String | String 左值,具体格式见表 leftvalue元素格式。 |
| properties | 是 | String | 表示过滤类型,支持的操作如下:=:等于!=:不等于<:小于<=:小于等于>:大于>=:大于等于&:与|:或HAS/HASNOT:是否有此属性CONTAIN/NOTCONTAIN:属性值中是否含有右值。 SUBSET:右值是属性值的子集IN/NOTIN:左值与右值是否有交集 PREFIX:右值是左值的前缀FUZZY:模糊匹配REGEX:正则匹配 SUBSTRING:右值是左值的子字符串CISUBSTRING:忽略大小写的子字符串。 |
| rightvalue | 是 | String | 右值,具体格式见表 rightvalue元素格式。 |
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| label_name | 否 | String | 若过滤“label”,可选“label_name”,值为“labelName”,rightvalue的value字段填具体的label的名称。 |
| property_name | 否 | String | 若过滤“property”,可选“property_name”,值为属性名称,rightvalue的value字段填属性的值。 |
| ID | 否 | String | 若对节点ID做过滤,可选id,值可不填。 |
| property_filter | 否 | String | 若“predicate”为“&”或者“|”,可在“leftvalue”和“rightvalue”中嵌套使用“property_filter”。 |
| degree | 否 | String | 可选["both","in","out"],代表点度数值过滤统计的方向。 |
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| value | 是 | String | 若过滤“label”,值为label的名称。若过滤“property”,值为属性名称。 |
| property_filter | 否 | String | 若“predicate”为“&”或者“|”,可在“leftvalue”和“rightvalue”中嵌套使用“property_filter”。 |
| predicate | label_name | id | property_name | 嵌套filter |
|---|---|---|---|---|
| & | 否 | 否 | 否 | 是 |
| | | 否 | 否 | 否 | 是 |
| HAS/HASNOT | 否 | 否 | 是 | 否 |
| =/!=/</<=/>/>= | 是 | 是 | 是 | 否 |
响应参数
| 参数 | 类型 | 说明 |
|---|---|---|
| errorMessage | String | 系统提示信息。
|
| errorCode | String | 系统提示信息。
|
| data | Object | 查询结果。查询失败时,字段为空。 |
| 参数 | 类型 | 说明 |
|---|---|---|
| source | String | 源点ID。 |
| target | String | 终点ID。 |
| index | String | 边index。 |
| label | String | 边label。 |
请求示例
POST /ges/v1.0/{project_id}/graphs/{graph_name}/action?action_id=repeat-query
{
"executionMode": "async",
"repeat": [
{
"operator": "outV",
"vertex_filter": {
"property_filter": {
"leftvalue": {
"label_name": "labelName"
},
"predicate": "=",
"rightvalue": {
"value": "rate"
}
}
}
}
],
"until": [
{
"vertex_filter": {
"property_filter": {
"leftvalue": {
"property_name": "movieid"
},
"predicate": "=",
"rightvalue": {
"value": "1"
}
}
}
}
],
"emit": false,
"vertices": [
"tr_10","tr_11"
]
}
以上请求等价于gremlin语句:
g.V('tr_10','tr_11').repeat(out().hasLabel('rate')).until(has('movieid','1')).dedup()
响应示例
状态码: 200
成功响应示例
{
"data":{
"edges":[
{
"index":"1",
"source":"tr_1",
"label":"rate",
"properties":{
"Rating":[
0
],
"Datetime":[
""
]
},
"target":"tr_3"
},
{
"index":"199998",
"source":"tr_1",
"label":"rate",
"properties":{
"Rating":[
0
],
"Datetime":[
""
]
},
"target":"tr_200000"
}
]
}
} 状态码: 400
失败响应示例
HttpStatusCode:400
{
"errorMessage":"graph [tesdt_117] is not found",
"errorCode":"GES.8806"
} 状态码
| 返回值 | 说明 |
|---|---|
| 400 Bad Request | 请求错误。 |
| 401 Unauthorized | 鉴权失败。 |
| 403 Forbidden | 没有操作权限。 |
| 404 Not Found | 找不到资源。 |
| 500 Internal Server Error | 服务内部错误。 |
| 503 Service Unavailable | 服务不可用。 |
错误码
请参见错误码。