找到neo4j中的所有子图

时间:2017-03-01 09:24:16

标签: neo4j cypher

我正在努力使用Neo4j查询来查找图表中的所有子图。基本上,我需要找到共享相同属性(当前,名称和位置)的所有type_a和type_b节点对。

a glorious subgraph

我有~15mln位置(灰色)节点,~60mln名称(红色)节点,~320mln type_a(紫色)节点和~250mln type_b(黄色)节点。

我的查询如下:

CYPHER runtime=compiledExperimentalFeatureNotSupportedForProductionUse
EXPLAIN
MATCH (fname:name) WITH fname
MATCH fname_path=(user_a:user_a)-[:HAS_FNAME]->(fname)<-[:HAS_FNAME]-(user_b:user_b)
WITH user_a, fname, user_b
MATCH lname_path=(user_a)-[:HAS_LNAME]->(lname)<-[:HAS_LNAME]-(user_b)
WITH user_a, user_b, lname, fname
MATCH (user_a)-[:HAS_LOCATION]->(loc)<-[:HAS_LOCATION]-(user_b)
RETURN user_a.id,user_b.id,fname.name,lname.name,loc.name;

我目前的问题是查询已运行了近两天没有任何结果,所以我认为它一定有问题

1 个答案:

答案 0 :(得分:1)

首先尝试使用有限的数据集。

CYPHER runtime=compiledExperimentalFeatureNotSupportedForProductionUse
MATCH (fname:name) WITH fname
WITH fname LIMIT 100000
MATCH fname_path=(user_a:user_a)-[:HAS_FNAME]->(fname)<-[:HAS_FNAME]-(user_b:user_b)
WITH user_a, fname, user_b
MATCH lname_path=(user_a)-[:HAS_LNAME]->(lname)<-[:HAS_LNAME]-(user_b)
WITH user_a, user_b, lname, fname
MATCH (user_a)-[:HAS_LOCATION]->(loc)<-[:HAS_LOCATION]-(user_b)
RETURN user_a.id,user_b.id,fname.name,lname.name,loc.name;

不要使用neo4j-shell或cypher-shell,而是使用带有螺栓驱动程序的程序,将结果记录直接传输到缓冲文件。