通过节点标签和属性类型提取neo4j图过滤的子集

时间:2018-01-22 18:02:56

标签: neo4j cypher

我试图从neo4j(v.2.3)中的巨大图表中提取数据子集,以便将该分区复制到文件中。

我想提取:

的所有数据(即标签/类型和键值属性)
  1. 在用户定义的标签集合中至少包含标签的节点;
  2. 第1点的关系绑定节点,至少是用户定义的类型集合中的类型。
  3. 我们假设我们有一个如下图表:

    CREATE 
    (n:Label0:Label1 { name: 'NameA', title: 'TitleA' }),
    (m:Label1:Label2:LabelBaz { name: 'NameB', title: 'TitleB' }),
    (o:Label3 { name: 'NameC', title: 'TitleC' }),
    (n)-[r:type0]->(m)
    (m)-[s:type1]->(o)
    

    如果我指定:

    1. Label0Label1
    2. type0
    3. 我应该获得节点nm以及关系r及其详细信息(即标签/类型和属性)

      如果我指定:

      1. Label0Label1
      2. type0type1
      3. 我应该获得节点nm以及关系r及其详细信息。

        如果我指定:

        1. Label0Label1
        2. type1
        3. 我应该获得节点nm及其详细信息,但没有任何关系。

          有没有办法让分区有几个Cypher个查询?

1 个答案:

答案 0 :(得分:2)

以下是获取每个关系的一种方法(其类型位于$types parameter,其2个末端节点在$labels参数中有标签)及其末端节点

MATCH (n)-[r]->(m)
WHERE
  TYPE(r) IN {types} AND
  ANY(l1 IN LABELS(n) WHERE l1 IN {labels}) AND
  ANY(l2 IN LABELS(m) WHERE l2 IN {labels})
RETURN r, n, m;

请注意,此查询无法利用任何索引(因为感兴趣的节点类型不是静态的,并且查询不关心节点属性)。因此,查询时间将随着节点数量的增加而增加。