迭代Cypher导致Scala

时间:2013-11-08 18:20:12

标签: scala neo4j

我正在使用嵌入了规模的Neo4j 1.9。 运行此代码时,我在第5行中有一条错误消息: java.lang.ClassCastException:scala.collection.immutable.Stream $ Cons无法强制转换为org.neo4j.graphdb.Node

这是我的代码:

 val _shortestPathQuery= """
    START n=node:node_auto_index(tag="body"),m=node:node_auto_index(tag="#text")
    MATCH p=shortestPath( n-[r:FATHER*..]-m )
    WHERE m.text =~ '.*%s.*'
    RETURN NODES(p) as pathnodes;
    """.stripMargin.format(toSearch)

    val tx = graphDb.beginTx()
    val result = engine.execute( _shortestPathQuery )

    val decPath:Iterator[org.neo4j.graphdb.Node]  = result.columnAs("pathnodes")

    for ( node:org.neo4j.graphdb.Node <- decPath)
    {
       println(node + ": " + node.getProperty("nodeid") + " " + node.getId)
    }

我找到了很多java代码,但我无法在Scala中进行转换。

如果我打印结果:println(result.dumpToString())我看到正确的行。

非常感谢

1 个答案:

答案 0 :(得分:0)

您返回一个包含Iterable个节点的列。

所以也许使用:

val _shortestPathQuery= """
    START n=node:node_auto_index(tag="body"),m=node:node_auto_index(tag="#text")
    MATCH p=shortestPath( n-[r:FATHER*..]-m )
    WHERE m.text =~ '.*%s.*'
    RETURN NODES(p) as pathnodes;
    """.stripMargin.format(toSearch)

    val tx = graphDb.beginTx()
    val result = engine.execute( _shortestPathQuery )

    val decPath:Iterator[Iterator[org.neo4j.graphdb.Node]]  = result.columnAs("pathnodes")

    for ( node:org.neo4j.graphdb.Node <- nodes <- decPath )
    {
       println(node + ": " + node.getProperty("nodeid") + " " + node.getId)
    }