【发布时间】:2021-06-18 09:57:26
【问题描述】:
我正在使用 Neo4j 开发一个联系人跟踪框架。有2种类型的节点,即Person和Location。 Person 和 Location 之间存在 VISITED 关系,该关系具有属性 startTS 和 endTS。示例:
现在假设人 1 被感染。我需要找到所有与此人有过接触的人。对于每个确定的人,我需要找到与该人有过接触的所有其他人。重复此过程,直到已识别的人没有遇到任何人。这是一个工作代码:
MATCH path = (infected:Person {id:'1'})-[*]-(otherPerson:Person)
WITH relationships(path) as rels, otherPerson
WHERE all(i in range(1, size(rels)-1)
WHERE i % 2 = 0
OR (rels[i].endTS >= rels[i-1].startTS AND rels[i].startTS <= rels[i-1].endTS)
)
RETURN otherPerson
问题在于该过程花费了太多时间来完成大型数据集。上面的查询可以优化吗?感谢您的帮助。
【问题讨论】:
标签: neo4j cypher graph-databases