0

我需要根据有序路径从 neo4j graphdb 中选择节点。

我需要具有以下约束的路径:

1) 路径可能遵循类型 C、D 和传出 M

2) C 型绝不能跟在 C 型或 M 型之后

3) 类型 D 绝不能跟随类型 D 或类型 M

我该如何为此编写一个java评估器?

4

2 回答 2

0

这是我最终使用的评估器,其中 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);
}
于 2013-06-13T11:33:02.703 回答
0

您可以使用 PathExpander 和可选的(为了性能) BranchState 来保持关于每个分支在哪里的状态,而不是在每次评估中查看路径

于 2013-05-21T15:44:59.243 回答