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。获取方法请参见获取项目ID。 |
请求参数
每层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 |
否 |
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。其分别表示:
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
系统提示信息。
- 执行成功时,字段可能为空。
- 执行失败时,用于显示错误码。
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()
响应示例
- 同步返回
成功响应示例
{ "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": "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 |
服务不可用。 |
错误码
请参见错误码。