检索结果后,我想基于关系创建一个新表。查询工作并输出很少的结果。
match (p:Person)-[r:LIVES]->(t:COUNTRY)<-[r2:LIVES]-(p2:Person)
where p<>p2 and r.year = r2.year and r.year >=2015 and r2.year>=2015
return p,r,t,r2,p2 limit 25;
但是当我想要所有结果时,服务器停止响应。
match (p:Person)-[r:LIVES]->(t:COUNTRY)<-[r2:LIVES]-(p2:Person)
where p<>p2 and r.year = r2.year and r.year >=2015 and r2.year>=2015
return p,r,t,r2,p2;
这基本上是自我连接的关系“ LIVES”。我进行了很多搜索,但没有找到创建关系索引的方法。
有什么建议吗?
答案 0 :(得分:1)
由于听起来您不受结果格式的束缚,所以我想提供一个替代的Cypher。
问题是,在您的密码中,p和p2基本上是同一年和同一国家的人的笛卡尔乘积。因此,实际上,您只需要按年份和国家/地区对人员进行分组,将一组中的一组过滤掉,然后该原始请求中的每一对就是您的p和p2。
MATCH (p:Person)-[r:LIVES]->(t:COUNTRY)
WHERE r.year >=2015
WITH t, DISTINCT r.year as Year, COLLECT({n:p, r:r}) as people
WHERE SIZE(people) > 1
RETURN t, people