我想进行扩展并搜索具有特定标签的节点。但我还想用特定标签过滤路径的节点。 标签栏包含的值类似于"实体;人物","实体;组织"
到目前为止我得到了什么
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}
问题
答案 0 :(得分:1)
1)使用path.vertices[* LIMIT 1,LENGTH(path.vertices)-2]
忽略顶点数组中的第一个(源)和最后一个(目标)条目。
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
作为绑定参数。因此,您可以在不更改查询的情况下扩展标签逻辑。