【发布时间】:2020-01-13 23:51:38
【问题描述】:
我在 Neo4j 中加载了一个图形数据集,其中节点是各种人,关系是它们之间的一些“真实”关系。使它变得复杂的是,每个关系都有一个有效的时间段。例如:
(p1:PERSON {name: "Andy"})
-[r1:HAS_RELATIONSHIP {from: "20190201", to: "20190215"}]->
(p2:PERSON {name: "Betty"})
-[r2:HAS_RELATIONSHIP {from: "20190301", to: "20190331"}]->
(p3:PERSON {name: "Cecil"})
我想以一个具体的人 P 为例,获取一份通过其他人与 P 有间接关系的所有人员的列表。它必须保证任何关系链中日期的交集都是非空的。
所以从前面的例子来看,如果我们把Andy当作P,结果应该是Andy, Betty,因为和Cecil的关系在完全不同的时间段内有效。但在以下情况下:
(p1:PERSON {name: "Andy"})
-[r1:HAS_RELATIONSHIP {from: "20190201", to: "20190215"}]->
(p2:PERSON {name: "Betty"})
-[r2:HAS_RELATIONSHIP {from: "20190210", to: "20190301"}]->
(p3:PERSON {name: "Cecil"})
结果应该是Andy, Betty, Cecil。
有没有办法在 Cypher 中指定这个条件?我正在寻找一种有效的解决方案来修剪已经找到的路径。
【问题讨论】:
-
您希望这些间接关系达到什么级别?
-
任意级别(没有限制)。