如何在neo4j java遍历中排除连续的RelationshipType?

时间:2013-05-16 22:17:39

标签: java neo4j traversal

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

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

1)路径可以跟随类型C,D和传出M

2)类型C必须永远不要遵循类型C或类型M

3)类型D绝不能遵循D型或M型

如何为此编写java评估程序?

2 个答案:

答案 0 :(得分:0)

您可以使用PathExpander并可选地(用于执行)BranchState来保持每个分支的位置是a.t.m.而不是在每个评估中查看路径

答案 1 :(得分: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);
}