查询关系非常慢

时间:2019-05-14 16:57:31

标签: neo4j cypher

检索结果后,我想基于关系创建一个新表。查询工作并输出很少的结果。

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”。我进行了很多搜索,但没有找到创建关系索引的方法。

有什么建议吗?

1 个答案:

答案 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