更新时间:2025-03-05 GMT+08:00

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

POST /ges/v1.0/{project_id}/graphs/{graph_name}/action?action_id=repeat-query
表1 路径参数

参数

是否必选

类型

说明

project_id

String

项目ID。获取方法请参见获取项目ID

graph_name

String

图名称。

请求参数

每层traversal的元素个数不超过1亿。

表2 请求Body参数

参数

是否必选

类型

说明

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’]

  • Default为默认模式,即用户路径的查询内容;
  • SimpleSubgraph返回用户路径查询的整个链路子图,仅包含点边的id和label信息;
  • SimpleEdges返回用户路径查询涉及的所有边,仅包含边的id和label信息;
  • Path返回用户路径查询的路径信息,即path的集合。

emit

Boolean

是否返回所有元素。默认为true。当前仅支持query_type=Default模式。

表3 edges元素格式

参数

是否必选

类型

说明

source

String

源节点ID。

target

String

目标节点ID。

index

String

此边在源节点边集合中的索引。

表4 repeat元素格式

参数

是否必选

类型

说明

operator

String

表示要做的查询类型,可选的值有:inV:入点outV:出点

bothV:入点。

vertex_filter

Json String

作用在下一条的点上,具体格式见表 property_filter元素格式

edge_filter

Json String

作用在点到点之间的边,具体格式见表 property_filter元素格式

表5 until元素格式

参数

是否必选

类型

说明

vertex_filter

Json String

在repeat 的operator为“ inV”或“outV”或“bothV”时可选,具体格式见表 property_filter元素格式

表6 property_filter元素格式

参数

是否必选

类型

说明

leftvalue

String

String 左值,具体格式见表 leftvalue元素格式

properties

String

表示过滤类型,支持的操作如下:=:等于!=:不等于<:小于<=:小于等于>:大于>=:大于等于&:与|:或HAS/HASNOT:是否有此属性CONTAIN/NOTCONTAIN:属性值中是否含有右值。

SUBSET:右值是属性值的子集IN/NOTIN:左值与右值是否有交集

PREFIX:右值是左值的前缀FUZZY:模糊匹配REGEX:正则匹配

SUBSTRING:右值是左值的子字符串CISUBSTRING:忽略大小写的子字符串。

rightvalue

String

右值,具体格式见表 rightvalue元素格式

表7 leftvalue元素格式

参数

是否必选

类型

说明

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"],代表点度数值过滤统计的方向。

表8 rightvalue元素格式

参数

是否必选

类型

说明

value

String

若过滤“label”,值为label的名称。若过滤“property”,值为属性名称。

property_filter

String

若“predicate”为“&”或者“|”,可在“leftvalue”和“rightvalue”中嵌套使用“property_filter”。

表9 predicate使用场景

predicate

label_name

id

property_name

嵌套filter

&

|

HAS/HASNOT

=/!=/</<=/>/>=

响应参数

表10 响应Body参数说明

参数

类型

说明

errorMessage

String

系统提示信息。

  • 执行成功时,字段可能为空。
  • 执行失败时,用于显示错误信息。

errorCode

String

系统提示信息。

  • 执行成功时,字段可能为空。
  • 执行失败时,用于显示错误码。

data

Object

查询结果。查询失败时,字段为空。

表11 data参数说明

参数

类型

说明

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

服务不可用。

错误码

请参见错误码