我需要創建一個查詢來分析程序包依賴關係圖。 有不同類型的包(hotfix,featurepack,servicepack)。Cypher查詢來分析依賴關係系統
package-A --DEPENDS_ON--> package-B
package-A --DEPENDS_ON--> package-F
package-B -- DEPENDS_ON --> package-C
package-B --> DEPENDS_ON --> package-D
package-B -- DEPENDS_ON --> package-E
package-D --> DEPENDS_ON --> package-J
package-E --DEPENDS_ON--> package-H
package-F --REPLACES--> package-E
package-K --REPLACES--> package-F // package-K is not a dependency of A
該圖真的可能在節點深度上很複雜。 目前我嘗試使用下面的查詢,但它不起作用。
START n = node(1501) // package A
MATCH n-[:DEPENDS_ON*]->b
WHERE NOT(b<-[:REPLACES*]-()) // an indirect dependency package is replaced.
// so it has to be filtered but, the replacing package must be a dependency of A.
RETURN DISTINCT b, b.full_name, b.created?
ORDER BY b.created?
我想獲得下面的軟件包列表: B,F,C,d則可能會在Where子句中更改過濾條件來此,J
感謝
嗨,謝謝你的回答。實際上它只返回一級包,而不是間接依賴包。也花費了太多時間(約63000毫秒)。 – yesil
我可以看到性能很差,因爲有這麼多的可變長度路徑模式。如果您事先知道一些長度,指定固定長度將會提高性能。不確定我是否理解僅獲取直接依賴包的問題,因爲它確實會返回樣本的預期結果。我在這裏創建一個控制檯,以便您可以看到查詢和結果。 http://console.neo4j.org/r/66ng0。也許你通過在不同的數據集上應用查詢來解決問題? –
非常感謝您爲您提供的傑出範例。實際上,我在將它應用於我的真實用例時遇到了問題。我不明白是什麼原因導致我的結果只包含一級包。 – yesil