neo4j:Traverser只获取第一个和最后一个节点

时间:2014-07-30 18:26:44

标签: java neo4j traversal

我认为我的代码中有错误,但我无法找到哪一个 我有三个节点: a,b和c 有这样的联系 (a) - [r1] - >(b)< - [r2] - (c)(我100%肯定这一点,我用neo4j社区检查过)

但是我的程序只能找到第一个和最后一个。第二个,b,总是被忽略。 这是我的方法:

static List<Node> getNodes(Node startNode,final Node endNode,boolean uniqueResult,List<RelationshipType> relationshipTypes)
{
    List<Node> result=new ArrayList<>();
    try(Transaction tx=getInstance()._graph.beginTx())
    {
        TraversalDescription td = getInstance()._graph.traversalDescription().breadthFirst();
        for(RelationshipType relationshipType:relationshipTypes)
            td=td.relationships(relationshipType);
        td=td.evaluator(Evaluators.excludeStartPosition());
        if(!uniqueResult)
            td=td.uniqueness(Uniqueness.NODE_PATH);
        td=td.evaluator(new Evaluator() {
            @Override
            public Evaluation evaluate(Path path) {
                boolean isEndNode=path.endNode().equals(endNode);
                return Evaluation.of(isEndNode, !isEndNode);
            }
        });      
        Traverser tr=td.traverse( startNode );
        for(Path path:tr)   
            result.add(path.endNode());

        tx.success();
    }   
    return result;
}

startNode是一个 endNode是c uniqueResult是真的(但我尝试了假,没有改变) relationShipTypes包含r1和r2。

我不知道为什么它不起作用 谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

Path是node-relationship-node的集合。

  • length()您可以访问路径长度,即rels的数量
  • nodes()返回路径中的Iterable节点
  • relationship()返回路径中的Iterable关系
  • 路径本身是一个Irablerable属性容器
  • startNode()和endNode()分别返回
  • lastRelationship()返回路径中的最后一个关系,因为它更常用

另请参阅:http://docs.neo4j.org/chunked/stable/tutorial-traversal-java-api.html#_path