[英]ArangoDB: Search for a property and filter multiple values in the path
我想进行扩展并搜索具有特定标签的节点。 但我也想用某个标签过滤路径的节点。 标签列包含“ Entity; Person”,“ Entity; Organization”之类的值
我到目前为止所得到的
LET source = (FOR x IN Entity FILTER x.objectID == @nodeId
Return x)[0]
FOR node, edge, path IN 1..@maxLength ANY source GRAPH @graph
FILTER CONTAINS(node.label, @search)
AND node != source
AND (CONTAINS (path.vertices[*].label, "Person") OR CONTAINS (path.vertices[*].label, "Organization") OR CONTAINS (path.vertices[*].label, "Incident"))
LIMIT @maxPaths
RETURN {node,path}
问题
1)使用path.vertices[* LIMIT 1,LENGTH(path.vertices)-2]
可以忽略vertices数组中的第一个(源)和最后一个(目标)条目。
2)您可以遍历子查询中搜索到的标签,并检查路径的顶点中是否存在一个标签。 如果找到一个,则以LIMIT 1 RETURN 1
退出子查询,该子查询将返回长度为1的数组,否则将得到长度为0的数组。然后可以根据这些长度进行过滤。
LET labels = ["Person","Organization","Incident"]
FOR source IN Entity FILTER source.objectID == @nodeId
LIMIT 1
FOR node, edge, path IN 1..@maxLength ANY source GRAPH @graph
FILTER CONTAINS(node.label, @search)
AND node != source
AND LENGTH(FOR i IN labels
FILTER CONTAINS(path.vertices[* LIMIT 1,LENGTH(path.vertices)-2].label, i)
LIMIT 1
RETURN 1) == 1
LIMIT @maxPaths
RETURN {node,path}
节点 :我将labels
用作绑定参数。 因此,您可以扩展标签逻辑而无需更改查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.