关于 neo4j:GraphDB – 获取不同类型节点之间的路径

GraphDB - get paths among different types of nodes

我有一个由 5 种类型的节点组成的图形数据库(使用 Neo4J),例如文件名、type1、type2、type3 和 type4。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE (:type1{name:type1_A})
CREATE (:type1{name:type1_B})

CREATE (:type2{name:type2_A})
CREATE (:type2{name:type2_B})

CREATE (:type3{name:type3_A})
CREATE (:type3{name:type3_B})

CREATE (:type4{name:type4_A})
CREATE (:type4{name:type4_B})

CREATE (:filename{name:1A_2A_3A_4A})
CREATE (:filename{name:1A_2A_3A_4A_another})
CREATE (:filename{name:1A_2B_3A_4A})
CREATE (:filename{name:1A_2A_3B_4A})
CREATE (:filename{name:1A_2A_3A_4B})

对于每个文件名,我创建了 4 个链接(具有相同的关系名称)如下:

1
2
3
4
MATCH(n:type1 {name:'type1_A'}) MATCH(f:filename {name:'1A_2A_3A_4A}) CREATE (n)-[:linked_to]->(f)"
MATCH(n:type2 {name:'type2_A'}) MATCH(f:filename {name:'1A_2A_3A_4A}) CREATE (n)-[:linked_to]->(f)"
MATCH(n:type3 {name:'type3_A'}) MATCH(f:filename {name:'1A_2A_3A_4A}) CREATE (n)-[:linked_to]->(f)"
MATCH(n:type4 {name:'type4_A'}) MATCH(f:filename {name:'1A_2A_3A_4A}) CREATE (n)-[:linked_to]->(f)"

以此类推其他文件名。

现在,例如,我想获取所有涉及链接到 type1_A AND type2_A AND type3_A AND type4_A 的文件名节点的路径。在这种情况下,我除了 '1A_2A_3A_4A' 和 '1A_2A_3A_4A_another' 节点以及 type1_A、type2_A 和 type3_A 节点的对应路径。

谁能建议我相应的 Cypher 查询?

谢谢


试试下面的,看看能不能得到你想要的。

1
2
3
4
5
6
7
MATCH
  (f:filename),
  (t1:type1 {name:"type1_A")-[t1lt:linked_to]->(f),
  (:type2 {name:"type2_A")-[:linked_to]->(f),
  (:type3 {name:"type3_A")-[:linked_to]->(f),
  (:type4 {name:"type4_A")-[:linked_to]->(f)
RETURN f, t1, t1lt