更新时间:2023-09-21 GMT+08:00

Filtered-query V2(2.3.6)

功能介绍

第二代filtered query。支持filtered query API和repeat query API共同的功能。

该接口支持对多跳过滤查询循环执行遍历查询进行加速。

例如以下gremlin语句:

g.V('node1').repeat(out('label_2')).emit()

URI

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

参数

是否必选

类型

说明

project_id

String

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

请求参数

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

表2 Body参数说明

参数

是否必选

类型

默认值

说明

executionMode(2.2.22)

String

sync

sync:同步,async:异步。

vertices

Array of Json

查询的起始节点ID列表。

repeat

Array of Json

执行repeat的过滤条件列表,数组的每个元素分别对应每一层要做的查询和过滤条件。具体格式见表repeat元素格式

until(2.2.22)

Array of Json

while/do looping模式。用于终止遍历过滤条件列表,具体格式见表 until元素格式。2.2.22版本until仅支持一个终止条件。

times

int

2

用于限制最长步数。默认值为2,最大值为20。

emit

Boolean

false

是否返回所有元素。默认为false。在输出select-as或tree下,emit的值决定了是否输出不在最终完整路径上的点。

limit

int

10000

控制点/边/path输出个数。

queryType(2.2.22)

String

Default

可选:['Default', ‘Tree’] ,Default为默认模式,即用户路径的查询内容;Tree返回用户路径查询的路径信息,并以tree的形式组织。

select(2.2.21)

Array of String

用来控制输出字段,可选择as中定义的字段。可以在参数 by中定义输出内容。

select有times+1个隐含的选择字段,v0,v1,v2...vtimes。其分别表示:

  • v0: 用户输入的点集第0层。
  • v1: K跳中的第1层。
  • v2: K跳中的第2层等。

select选择的结果路径是默认去重的。

by(2.2.21)

Array of Json

输出所有

用于控制输出字段具体内容。

  1. 当字段不存在时,默认为输出所有内容。
  2. 当选择select模式时,by的个数需与select的个数一致,且在select模式下,每个by只能输出一个元素。
  3. 当没有使用select选择输出元素时,by作用在最终的结果集上。详情查看表 by元素参数格式

statistics

Boolean

false

是否仅返回命中个数。默认为false。

mode

Boolean

强制指定traversal模式。可选:['Dense',Sparse']。默认策略会根据图结构自动切换。

strategy

String

ShortestPath

traversal策略,可选:['ShortestPath',Walk']。

restricted(2.2.28)

Boolean

true

是否对输入严格校验,默认为“true”。

  • 在true模式下,如果参数vertices中包含不存在的点,查询会直接退出并报错。
  • 在false模式下,系统会把vertices中不存在的点过滤掉再进行查询任务。
表3 by元素参数格式

参数

是否必选

类型

说明

id

Boolean

是否输出id。默认为false。

label

Boolean

是否输出label。默认为false。

properties

Boolean

是否输出properties。默认为false。

selectedProperties

Array of String

当properties字段为true时,可以选择输出的属性项。字段为空时输出所有属性字段。该字段默认为空。

表4 repeat元素格式

参数

是否必选

类型

说明

operator

String

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

vertex_filter

JSON String

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

edge_filter

JSON String

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

as

JSON String

为该层元素取别名。后续可以用于定义输出字段。

表5 until元素格式

参数

是否必选

类型

说明

vertex_filter

JSON String

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

表6 property_filter元素格式

参数

是否必选

类型

说明

leftvalue

String

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

predicate

String

表示过滤类型,支持的操作如下:

比较运算符:

  • =:等于
  • !=:不等于
  • <:小于
  • <=:小于等于
  • >:大于
  • >=:大于等于

逻辑运算:

  • &:与
  • |:或

集合运算:

  • IN/NOTIN:左值与右值是否有交集
  • CONTAIN/NOTCONTAIN:属性值中是否含有右值
  • SUBSET:右值是属性值的子集

匹配运算符:

  • PREFIX:右值是左值的前缀
  • NOTPREFIX:右值不是左值的前缀
  • SUFFIX:右值是左值的后缀
  • NOTSUFFIX:右值不是左值的后缀
  • SUBSTRING:右值是左值的子字符串
  • NOTSUBSTRING:右值不是左值的子字符串
  • FUZZY:模糊匹配
  • REGEX:正则匹配
  • CISUBSTRING:忽略大小写的子字符串

HAS/HASNOT:是否有此属性,仅支持属性过滤,即左值仅支持property_name。

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

JSON String

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

degree

String

可选["both","in","out"],代表点度数值过滤统计的方向。

表8 rightvalue元素格式

参数

是否必选

类型

说明

value

String

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

property_filter

JSON 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参数说明

    参数

    类型

    说明

    vertices

    List

    点的结果集合。filters最后一层为点过滤时,data中将包含vertices。

    edges

    List

    边的结果集合。filters最后一层为边过滤时,data中将包含edges。

  • 异步返回
    表12 响应Body参数说明

    参数

    类型

    说明

    errorMessage

    String

    系统提示信息。

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

    errorCode

    String

    系统提示信息。

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

    job_id

    String

    执行算法任务ID。请求失败时,该字段为空。

    jobType

    Integer

    任务类型。请求失败时,该字段为空。

请求示例

  • 请求样例1:列出满足过滤条件的第k跳节点或边,查询类型是出点,作用在下一跳的点上。
    POST /ges/v1.0/{project_id}/graphs/{graph_name}/action?action_id=path-query
     {
       "repeat":[
         {
           "operator":"outV",
           "vertex_filter":{
             "property_filter":{
               "leftvalue":{
                 "label_name":"labelName"
               },
               "predicate":"=",
               "rightvalue":{
                 "value":"rate"
               }
             }
           }
         }
       ],
       "times":2,
       "vertices":[
         "1","2"
       ]
     }

    以上请求等价于gremlin语句:g.V('1','2').repeat(out().hasLabel('rate')).times(2).dedup()

  • 请求样例2:列出满足过滤条件的第k跳节点或边,查询类型是出点,作用在下一跳的点上。
    POST /ges/v1.0/{project_id}/graphs/{graph_name}/action?action_id=path-query
     {
       "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"
               }
             }
           }
         }
       ],
       "vertices":[
         "v1","v2"
       ]
     }

    以上请求等价于gremlin语句:

    g.V('v1','v2').repeat(out().hasLabel('rate')).until(has('movieid','1')).dedup()

响应示例

  • 同步返回

    状态码: 200

    成功响应示例

    {
         "data":{
             "vertices":[
                 {
                     "id":"51",
                     "label":"user",
                     "properties":{
                         "occupation":[
                             "homemaker"
                         ],
                         "gender":[
                             "F"
                         ],
                         "Zip-code":[
                             "46911"
                         ],
                         "userid":[
                             5
                         ],
                         "age":[
                             "56+"
                         ]
                     }
                 }
             ]
         }
     }

    状态码: 400

    失败响应示例

    Http Status Code: 400
    {
        "errorMessage": "graph [tesdt_117] is not found",
        "errorCode": "GES.8806"
    }
  • 异步返回

    状态码: 200

    成功响应示例

    Http Status Code: 200
    {
        "jobId": "6622f13c-4b88-45f5-89a9-eaa096647c4a",
        "jobType": 1
    }

    状态码: 400

    失败响应示例

    Http Status Code: 400
    {
        "errorMessage": "executionMode is not correct, it should be sync or async",
        "errorCode": "GES.8806"
    }

状态码

返回值

说明

400 Bad Request

请求错误。

401 Unauthorized

鉴权失败。

403 Forbidden

没有操作权限。

404 Not Found

找不到资源。

500 Internal Server Error

服务内部错误。

503 Service Unavailable

服务不可用。

错误码

请参见错误码