如何让下面的查询工作秒而不是几分钟?
我是图表数据库的新手。如果我说节点索引不会有助于加快我的查询,我是对的吗?据我了解,索引有助于找到遍历的起点,而不是遍历自己。
可能关系索引对我的情况有帮助吗?
我有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
此外,我想[r:MET_REL*2..25]
代替[r:MET_REL*2..5]
答案 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函数。