【问题标题】:Use Cypher to perform filtering on every pair of relationships during graph traversal在图遍历过程中使用 Cypher 对每一对关系进行过滤
【发布时间】:2015-04-18 17:44:59
【问题描述】:

我的问题最好用一个具体的场景来回答。

假设我正在为航空旅行建模。机场被建模为节点,航班被建模为关系。

假设我有一条从皮奥里亚到芝加哥再到洛杉矶的单程路径。

PIA -> ORD -> LAX

因此,这条路径有三个机场和两个航班:PIA -> ORD 和 ORD -> LAX。每个航班都有到达和离开时间。

是否可以在每对关系之间进行计算/比较并使用它们进行过滤?

例如 我想计算中途停留时间,即 ORD 的出发时间 -> LAX 减去 PIA 的到达时间 -> ORD。如果该停留时间小于/大于某个最小值/最大值,则过滤掉该路径。

对图中的每一对关系执行上述操作。

我当然可以在事后执行这个计算。也就是说,我可以找到长度为 N 的所有路径或最短路径,然后以编程方式过滤掉不满足中转约束的路径。

我已经研究过使用 Java API 的选项,例如 Dijkstra,但它的局限性太大。

我对 Cypher 比较陌生;我的大部分工作都是使用 Java API。尽管我缺乏使用 Cypher 的经验,但我熟悉使用 WHERE 子句排除节点和关系。我的问题集中在使用 WHERE 子句过滤路径上每对关系之间的计算。

谢谢

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    查找满足您的中途停留限制(例如,最少 = 20,最多 = 90)的所有 2 航段航班。这个简单的模型假设时间以分钟为单位。

    MATCH p = (a:Airport)-[l1:LEG]->(b:Airport)-[l2:LEG]->(c:Airport)
    WITH l2.departure - l1.arrival AS layover, p
    WHERE layover <= 90 AND layover >= 20
    RETURN p;
    

    【讨论】:

    • 我将对长度为 N 的路径中的所有对进行概括。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多