使用Cypher查找关联

时间:2019-04-22 10:52:19

标签: neo4j cypher

我以csv格式关联了ID。

例如:

ID, Associated_ID
1,2
3,4
8,1
2,100
100,100
8,101
200,200

我想获取所有关联的ID。

在这种情况下,预期结果是:

  

[1,2,8,100,101]

     

[3,4]

     

[200]

load csv from 'file:///test/test.data'  AS line 
CREATE (:ids { mc: line[0], associated_mc:line[1]})
MERGE (m1:id {name: line[0]}) 
MERGE (m2:id {name: line[1]}) 
MERGE (m1)-[:SAME]->(m2);
MATCH p=(a)-[r:SAME*]-(b) RETURN p;

2 个答案:

答案 0 :(得分:0)

您正在创建一个数据库,并在单个查询中对其进行检索。 您应该分别运行这两个查询。

在创建节点时,您无需编写CREATE,MERGE会这样做,避免重复。因此,您可以通过以下查询加载数据

LOAD CSV FROM 'file:///test/test.data'  AS line 
MERGE (m1:id {name: toInt(line[0])}) 
MERGE (m2:id {name: toInt(line[1])}) 
MERGE (m1)-[:SAME]->(m2);

并通过以下查询获取所需结果:

MATCH p=(start:id)-[:SAME*]->(end:id)
WHERE 
    NOT EXISTS ((end)-[:SAME]->()) 
    AND 
    NOT EXISTS ((start)<-[:SAME]-()) 
return EXTRACT(node IN nodes(p) | node.name)
  

如果您不把条件放在任何地方,您将获得太多的路径   其他较长路径的一部分。您可以通过删除WHERE条件

来验证结果

答案 1 :(得分:0)

这对我有用-

MATCH (m:id)
CALL apoc.path.subgraphAll(m, {relationshipFilter:'SAME'}) YIELD nodes
with EXTRACT(node IN nodes | node.name) as ex_nodes
return  distinct apoc.coll.sort(ex_nodes);