Neo4J优化路径生成查询

时间:2017-02-09 18:09:29

标签: neo4j cypher graph-databases

如何让下面的查询工作秒而不是几分钟?

我是图表数据库的新手。如果我说节点索引不会有助于加快我的查询,我是对的吗?据我了解,索引有助于找到遍历的起点,而不是遍历自己。

可能关系索引对我的情况有帮助吗?

查询

我有2,500个类型COLUMN的节点和52,000个节点之间的关系。

下面的查询太慢了,我甚至都不知道它有多慢。它需要超过5分钟,而不是java.net.SocketTimeoutException

查询

MATCH path = (start:PERSON)-[r:MET_REL*2..5]->(person:PERSON) 
WHERE start.ID = '385' 
WITH path UNWIND NODES(path) AS col
WITH path, 
COLLECT(DISTINCT col.COUNTRY_ID) as distinctCountries
WHERE LENGTH(path) + 1 = SIZE(distinctCountries)
RETURN path

P.S。

此外,我想[r:MET_REL*2..25]代替[r:MET_REL*2..5]

1 个答案:

答案 0 :(得分:1)

确保您在:PERSON(ID)

上有索引/约束

请试试这个:

MATCH path = (start:PERSON)-[:MET_REL*2..5]->(person:PERSON) 
WHERE start.ID = '385' 
WITH path, reduce(a=[], n in nodes(path) | case when n.COUNTRY_ID IN a then a else a + [n.COUNTRY_ID] end) as countries
WHERE LENGTH(path) + 1 = SIZE(distinctCountries)
RETURN path

使用APOC,可以在国家/地区使用apoc.coll.toSet函数。