2013-10-21 62 views
1

我有一個Neo4j圖,有12個輸入和4個輸出,我試圖用Java Traverser編寫一個查詢,它將返回從輸入到輸出節點的14條唯一路徑。我試過的所有查詢都只返回14個路徑的一個子集。例如,下面的代碼返回4個路徑,但其他10個都停止輸出1個節點。通過Neo4j圖尋找獨特的路徑

RelationshipType relType = RelationshipTypes.EDGE; 
TraversalDescription td = new TraversalDescriptionImpl() 
     .depthFirst() 
     .relationships(relType, Direction.OUTGOING); 
for (Node node : inputs){ 
    Traverser tv = td.traverse(node); 
    Iterator<Path> iter = tv.iterator(); 
    // ... print path 
} 

我試過獨特性和深度設置,以及沒有效果。

下面的查詢返回使用Web界面的所有14條路徑,但是當我使用ExecutionEngine類時,我只返回13條路徑。

START s=node(*) 
MATCH (s)-[p:EDGE*]->(c) 
WHERE s.type! = "INPUT" AND c.type! = "OUTPUT" 
RETURN p 

如何獲得使用Java API的所有唯一路徑?

+0

您的數據集足夠小,可以在[Neo4j控制檯](http://console.neo4j.org)上發佈,並分享鏈接?此外,您的密碼查詢可能不會返回您認爲的路徑,如果您想要路徑,請嘗試在'MATCH'子句中將'path ='預先加入模式並返回'path'。你的'p'是一組關係。 – jjaderberg

+0

測試數據位於http://console.neo4j.org/?id=1nom33。 – Larry

回答

0
START s=node(*) 
WHERE s.type = "INPUT" 
MATCH (s)-[p:EDGE*]->(c) 
WHERE c.type = "OUTPUT" 
RETURN p; 

這有點類似於你的。它根據您提供的Neo4j控制檯示例返回14個條目。