2
我對Neo4j相當陌生,我試圖構建一個小示例應用程序:一個公共交通規劃師。它看起來如下(顯然非常簡化的例子):neo4j中最短路徑搜索的訪問關係屬性
每個總線(跳閘)的出發和到達時間存儲爲關係屬性。我希望公共汽車在特定時間附近(或之後)離開,同時在出發後儘快到達(即不一定是最短但最快的路線)。
我在Cypher中做了很多實驗,但是我一直無法做到這一點。有什麼建議?
編輯:更新圖
我對Neo4j相當陌生,我試圖構建一個小示例應用程序:一個公共交通規劃師。它看起來如下(顯然非常簡化的例子):neo4j中最短路徑搜索的訪問關係屬性
每個總線(跳閘)的出發和到達時間存儲爲關係屬性。我希望公共汽車在特定時間附近(或之後)離開,同時在出發後儘快到達(即不一定是最短但最快的路線)。
我在Cypher中做了很多實驗,但是我一直無法做到這一點。有什麼建議?
編輯:更新圖
要啓用一個簡單的Cypher查詢,你可以改變你的圖形模式是這樣的:
(:Trip)-[:LEG {start: 10, end: 20}]->(:Stop)-[:LEG {start: 30, end: 40}]->(:Stop) ...
| |
[:AT] [:AT]
| |
v v
(Location {name: "Paris"}) (Location {name: "London"})
總之,每行由鏈N條腿和N站。每個停靠點都與一個位置相關,並且每條腿都存儲其開始和結束時間。
使用上述模型,將返回以下查詢:(a)在時間40或之後開始的最快旅程的路徑,以及(b)該旅程的持續時間。
MATCH p=(t:Trip)-[legs:LEG*1..]->(s:Stop)-[:AT]->(loc:Location)
WHERE HEAD(legs).start >= 40 AND NOT (s)-[:LEG]->()
WITH p, LAST(legs).end - HEAD(legs).start AS duration
RETURN p, duration ORDER BY duration LIMIT 1;
Here is a console顯示樣本結果。
我一直在試驗你的和我自己的解決方案,並且讓他們都工作('LAST()'和'HEAD()')。但是,現在我遇到了問題(在兩種解決方案中),如果我添加更多的線路,有時會在時間t開始停車a,停下來並在時間
Ben
@Ben我認爲你沒有正確使用我的模型。在抵達之前,不可能離開停止站,因爲連鎖店的所有停靠站都嚴格按照時間順序排列。如果你重新訪問同一個位置,也許你正在重複使用Stop實例 - 這在我的模型中是不允許的(即使你重新訪問一個位置,你也必須創建一個新的Stop)。這是否解決了這個問題?如果沒有,請提供一組顯示問題的數據(例如,在控制檯中)。 – cybersam
我同意把鏈接放在一個鏈條中很重要。你有兩個模型。旅程(鏈接列表)和時間表(到達和離開時間也可以在第一站和跨時間段以及某些工作日(工作日,週末,假日)和小時範圍(高峯時段,早晨,晚上,中午)) –