我正在努力使用Neo4j查询来查找图表中的所有子图。基本上,我需要找到共享相同属性(当前,名称和位置)的所有type_a和type_b节点对。
我有~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;
我目前的问题是查询已运行了近两天没有任何结果,所以我认为它一定有问题
答案 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,而是使用带有螺栓驱动程序的程序,将结果记录直接传输到缓冲文件。