使用java将数据从Neo4j导出到csv

时间:2013-10-14 13:38:16

标签: neo4j

将数据从Neo4j导出到CSV的最佳方法是什么?我使用链接https://github.com/sroycode/neo4j-import中的CSV导入器将数据从csv导入到neo4j。

我已对数据执行了一些操作,我想将查询结果返回到csv,有人可以向我建议解决方案。

iam使用neo4j 1.9.3和java 1.6

2 个答案:

答案 0 :(得分:3)

Groovy中的一个简短代码段:

@Grab(group="org.neo4j", module="neo4j-cypher", version="1.9")
@Grab(group='net.sf.opencsv', module='opencsv', version='2.3') 
import org.neo4j.kernel.EmbeddedGraphDatabase
import org.neo4j.cypher.javacompat.ExecutionEngine
import au.com.bytecode.opencsv.CSVWriter

assert args, "specify location of graph.db and cypher statement"

def db = new org.neo4j.kernel.EmbeddedGraphDatabase(args[0])
def ee = new ExecutionEngine(db)
def result = ee.execute(args[1])
def columns = result.columns()

System.out.withWriter { writer ->
    CSVWriter csv = new CSVWriter(writer)
    csv.writeNext(columns as String[])

    for (def row in result) {
        def values = columns.collect {row[it]}
        csv.writeNext(values as String[])
    }
}
db.shutdown()

当然opencsv也可以在纯Java环境中使用。

答案 1 :(得分:1)

由于你已经拥有了id,你可以使用cypher获取id(5)的id及其fwd关系,csv分隔符是'|'

测试使用neo4j-shell 语法:neo4j-shell< infile> OUTFILE

节点的

infile看起来像

START n=node(1,2,3,4,5) return ID(n),n.name?,n.property?;
START n=node(6,7,8,9,10) return ID(n),n.name?,n.property?;
....

infile for reln看起来像

START n=node(1,2,3,4,5) MATCH n-[r]->m RETURN ID(n),ID(m),TYPE(r),r.someprop?;
START n=node(6,7,8,9,10) MATCH n-[r]->m RETURN ID(n),ID(m),TYPE(r),r.someprop?;
....

要在Java API中执行相同的操作,只需在for循环中运行相同的操作。