0
讓我們假設一個非常簡單的人(作爲節點)和KNOWS-和FRIEND_OF-中間關係的示例圖。 現在我想讓每個知道隨機人員的節點都是FRIEND_OF(這個或另一個人)。請考慮,我想使用遍歷來檢查這些關係,而不是簡單的node.hasRelationship()。Neo4j:遍歷返回
因此我將描述一個TraversalDescription,它在其Evaluator中檢查路徑長度,並在步驟1中選擇KNOWS關係。如果有一個I(自動)轉到路徑中連接的KNOWS節點,必須退回到傳出節點。因此,我只需檢查傳入的KNOWS關係的path.length == 2時間,並在當前遍歷的節點具有path-startnode的標識時將continue-variable設置爲true。
問題:我從來沒有回到path-startnode(我檢查了KNOWS關係的那個),它從不出現在評估器中;我也嘗試使用不同的UNIQUENESS參數,但沒有一個能夠工作。
/編輯: 這是我穿越描述(僞代碼或多或少):
TraversalDescription td = Traversal.description()
.relationships(RelTypes.KNOWS, Direction.BOTH)
.relationships(RelTypes.FRIEND_OF, Direction.OUTGOING)
.uniqueness(Uniqueness.NONE)
.evaluate(new Evaluator(){
public Object evaluate(final Path path){
if (path.length == 0) return EXCLUDE_CONTINUE;
Relation currentRel = path.lastRelationship();
boolean continue = false;
boolean include = false;
if (path.length == 1){
// check for outgoing knows-relation
continue = currentRel.isType(KNOWS) && currentRel.startNode().getId == path.startNode().getId();
}
else if (path.length == 2){
// check for outgoing knows-relation to the original start node
// SECOND PART OF STATEMENT NEVER GETS TRUE!
toContinue = currentRel.isType(KNOWS) && currentRel.startNode().getId == path.startNode().getId();
}
else if (path.length == 3){
// ...
}
return Evaluation.of(toContinue, include);
}
是的,感謝您的評論。如上所述:它只是僞代碼,所以不要介意include字段總是假的。在示例中將分配給比較。 當我有機會測試你的遍歷時會回來。 – funglejunk