查询neo4j java后得到路径

时间:2018-05-30 17:45:34

标签: java neo4j neo4j-java-api

我正在尝试查询所有可能的路径,这些路径对应于“(订单) - [订单] - >(产品) - [PART_OF] - >(类别)”并希望获取整个路径(即所有3个节点和2个关系作为其适当的类)。

我在下面使用的方法只让我有1列数据(订单数量:2155)。如果我再次尝试它(第二次循环),我得到的行数是0(产品数量:0)。有没有办法将所有结果保存为节点和关系,还是我必须查询命令5次? 请帮忙!

String query = "MATCH (o:Order)-[:ORDERS]->(p:Product)-[:PART_OF]->(cate:Category) return o,p,cate";
    try( Transaction tx = db.beginTx();
         Result result = db.execute(query) ){
        Iterator<Node> o_column = result.columnAs( "o" );
        int i = 0;
        for ( Node node : Iterators.asIterable( o_column ) )
        {
            i++;
        }
        System.out.println("number of orders: " + i);
        i = 0;
        Iterator<Node> p_column = result.columnAs( "p" );
        for ( Node node : Iterators.asIterable( p_column ) )
        {
            i++;
        }
        System.out.println("number of products: " + i);

        tx.success();
    }

2 个答案:

答案 0 :(得分:1)

如果你这样做:

MATCH path=(o:Order)-[:ORDERS]->(p:Product)-[:PART_OF]->(cate:Category) return path

您可以在循环中处理路径并解压缩。需要进行一些探索,但所有信息都在那里。

希望有所帮助。

此致 汤姆

答案 1 :(得分:0)

我在下面的代码中找到了解决此问题的方法,我使用id()将返回值更改为节点ID,然后使用GraphDatabaseService.getNodeByID(long)

String query = "MATCH (o:Order)-[:ORDERS]->(p:Product)-[:PART_OF]->(cate:Category) return id(o), id(p), id(cate)";

int nodeID = Integer.parseInt(column.getValue().toString()); Node node = db.getNodeById(nodeID);