我需要根据有序路径从 neo4j graphdb 中选择节点。
我需要具有以下约束的路径:
1) 路径可能遵循类型 C、D 和传出 M
2) C 型绝不能跟在 C 型或 M 型之后
3) 类型 D 绝不能跟随类型 D 或类型 M
我该如何为此编写一个java评估器?
这是我最终使用的评估器,其中 IS_MEMBER 是问题中描述的关系 M。
public Evaluation evaluate(final Path path) {
if (path.length() == 0) {
return Evaluation.EXCLUDE_AND_CONTINUE;
}
boolean isOutgoingIS_MEMBER = (
path.lastRelationship().getEndNode() ==
path.endNode() &&
(path.lastRelationship()
.isType(ReqsDb.RelTypes.IS_MEMBER)));
boolean isRelTypeUnique = true;
Iterator<Relationship> i =
path.reverseRelationships().iterator();
i.next();
while (i.hasNext()) {
if (i.next().isType(path.lastRelationship()
.getType())) {
isRelTypeUnique = false;
break;
}
}
boolean included = isOutgoingIS_MEMBER || isRelTypeUnique;
boolean continued = included;
return Evaluation.of(included, continued);
}
您可以使用 PathExpander 和可选的(为了性能) BranchState 来保持关于每个分支在哪里的状态,而不是在每次评估中查看路径