Filtered-query V2(2.3.6)
功能介绍
第二代filtered query。支持filtered query API和repeat query API共同的功能。
该接口支持对多跳过滤查询,循环执行遍历查询进行加速。
例如以下gremlin语句:
g.V('node1').repeat(out('label_2')).emit()
URI
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| project_id | 是 | String | 参数解释: 项目编号。获取方法,请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母和数字组成,且长度为[1-64]个字符。 默认取值: 不涉及。 |
| graph_name | 是 | String | 图名称。 |
请求参数
每层traversal的元素个数不超过1亿。
| 参数 | 是否必选 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| 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 | 否 | Integer | 2 | 用于限制最长步数。默认值为2,最大值为20。 |
| emit | 否 | Boolean | false | 是否返回所有元素。默认为false。在输出select-as或tree下,emit的值决定了是否输出不在最终完整路径上的点。 |
| limit | 否 | Integer | 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。其分别表示:
select选择的结果路径是默认去重的。 |
| by(2.2.21) | 否 | Array of Json | 输出所有 | 用于控制输出字段具体内容。
|
| statistics | 否 | Boolean | false | 是否仅返回命中个数。默认为false。 |
| mode | 否 | Boolean | 无 | 强制指定traversal模式。可选:['Dense',Sparse']。默认策略会根据图结构自动切换。 |
| strategy | 否 | String | ShortestPath | traversal策略,可选:['ShortestPath',Walk']。 |
| restricted(2.2.28) | 否 | Boolean | true | 是否对输入严格校验,默认为“true”。
|
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| id | 否 | Boolean | 是否输出id。默认为false。 |
| label | 否 | Boolean | 是否输出label。默认为false。 |
| properties | 否 | Boolean | 是否输出properties。默认为false。 |
| selectedProperties | 否 | Array of String | 当properties字段为true时,可以选择输出的属性项。字段为空时输出所有属性字段。该字段默认为空。 |
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| operator | 是 | String | 表示要做的查询类型,可选的值有:inV(入点), outV(出点), bothV(入点和出点)。 |
| vertex_filter | 否 | JSON String | 作用在下一跳的点上。具体格式见property_filter元素格式。 |
| edge_filter | 否 | JSON String | 作用在点到点之间的边。具体格式见property_filter元素格式。 |
| as | 否 | JSON String | 为该层元素取别名。后续可以用于定义输出字段。 |
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| vertex_filter | 否 | JSON String | 在repeat 的operator为“ inV”或“outV”或“bothV”时可选,具体格式见property_filter元素格式。 |
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| leftvalue | 是 | String | 左值,具体格式见leftvalue元素格式。 |
| predicate | 是 | String | 表示过滤类型,支持的操作如下: 比较运算符:
逻辑运算:
集合运算:
匹配运算符:
HAS/HASNOT:是否有此属性,仅支持属性过滤,即左值仅支持property_name。 |
| 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 | 否 | JSON String | 若“predicate”为“&”或者“|”,可在“leftvalue”和“rightvalue”中嵌套使用“property_filter”。 |
| degree | 否 | String | 可选["both","in","out"],代表点度数值过滤统计的方向。 |
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| value | 是 | String | 若过滤“label”,值为label的名称。若过滤“property”,值为属性名称。 |
| property_filter | 否 | JSON String | 若“predicate”为“&”或者“|”,可在“leftvalue”和“rightvalue”中嵌套使用“property_filter”。 |
| 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
系统提示信息。
- 执行成功时,字段可能为空。
- 执行失败时,用于显示错误码。
jobId
String
执行算法任务ID。请求失败时,该字段为空。
jobType
Integer
任务类型。请求失败时,该字段为空。
请求示例
- 请求样例1:列出满足过滤条件的第k跳节点或边,查询类型是出点,作用在下一跳的点上。
POST http://{SERVER_URL}/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 http://{SERVER_URL}/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()
响应示例
- 同步返回
成功响应示例
{ "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" }
- 异步返回
成功响应示例
Http Status Code: 200 { "jobId": "6622f13c-4b88-45f5-89a9-eaa096647c4a", "jobType": 1 }状态码: 400
失败响应示例
Http Status Code: 400 { "errorMessage": "Not found. Please check the input parameters.", "errorCode": "GES.8000" }
状态码
| 返回值 | 说明 |
|---|---|
| 400 Bad Request | 请求错误。 |
| 401 Unauthorized | 鉴权失败。 |
| 403 Forbidden | 没有操作权限。 |
| 404 Not Found | 找不到资源。 |
| 500 Internal Server Error | 服务内部错误。 |
| 503 Service Unavailable | 服务不可用。 |
错误码
请参见错误码。