繁体   English   中英

ArangoDB:搜索属性并过滤路径中的多个值

[英]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. 过滤器位于路径的所有节点上。 我想过滤没有来源和目的地的路径。
  2. 包含/或部分确实很难看。 有没有更好的方法来过滤多个值?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM