我正在使用Neo4j Traversal Framework(Java)。 我需要创建自定义evalutor以包含某些条件为真的节点
我的代码是:
@Override
public Evaluation evaluate(Path path) {
log.info("Node Id: " + path.endNode().getProperty("DIST_ID"));
long mCount = 0;
if ((Long) path.endNode().getProperty("RANK") >= 3) {
mCount++;
}
log.info("mCount " + mCount);
return Evaluation.INCLUDE_AND_CONTINUE;
}
};
TraversalDescription traversalDescription = db.traversalDescription();
Traverser traverser = traversalDescription.breadthFirst()
.relationships(RelationshipTypes.SPONSOR, Direction.OUTGOING).evaluator(e).traverse(DSTS);
DSTS是传入节点。它意味着顶级节点。我想使用rank来分割下行节点。如果我需要两个级别,所以我想通过使用rank来分割两个级别.rank是node.if的属性之一是5我想收集这个节点和它将传出节点,直到获得排名5.
如有可能请指导我......
答案 0 :(得分:1)
您可以查看分支状态,即使用evaluate
方法,该方法也采用BranchState
参数。您可以使用它来保持每个访问的遍历分支的状态,并在向下移动遍历分支时进行扩充。 E.g。
new PathEvaluator<Long> {
public Evaluation evaluate(Path path, BranchState<Long> state) {
log.info("Node Id: " + path.endNode().getProperty("DIST_ID"));
long mCount = state.getState();
if ((Long) path.endNode().getProperty("RANK") >= 3) {
mCount++;
state.setState( mCount );
}
if ( mCount >= 5 ) {
// do something
}
log.info("mCount " + mCount);
return Evaluation.INCLUDE_AND_CONTINUE;
}
}
这相当于在每个评估中从整个路径总结RANK,但是BranchState使其更具性能。
这是你想到的吗?