py2neo在WriteBatch中使用get或create

时间:2013-06-10 11:41:56

标签: neo4j py2neo

我刚刚开始使用Neo4j和py2neo。我正在试验py2neo中可用的批处理功能,用于加载neo4j数据库的批量数据。

在基本级别,我想创建两个节点(或者如果它们已经存在则获取它们)并使用py2neo中的WriteBatch在默认权重(或者如果关系已存在时增加权重)之间创建它们之间的关系。 / p>

该文档仅说明了如何创建两个新节点并在它们之间形成关系。我正在研究以下方面的内容:

from py2neo import neo4j, cypher
graphdb = neo4j.GraphDatabaseService()
topic_index = graphdb.get_or_create_index(neo4j.Node, "node_index")
batch = neo4j.WriteBatch(graphdb)
batch.get_or_create_indexed_node('node_index', 'name', 'Alice', {'name': 'Alice'})
batch.get_or_create_indexed_node('node_index', 'name', 'Bob', {'name': 'Bob'})
batch.get_or_create_indexed_relationship('rel_index', 'type', 'KNOWS', 0, 'KNOWS', 1, {})
results = batch.submit()

然而,这失败并出现错误:

  

SystemError:{u'stacktrace':[u'org.neo4j.server.rest.batch.NonStreamingBatchOperations.invoke(NonStreamingBatchOperations.java:63)',u'org.neo4j.server.rest.batch.BatchOperations。 performRequest(BatchOperations.java:178)',u'org.neo4j.server.rest.batch.BatchOperations.parseAndPerform(BatchOperations.java:149)',u'org.neo4j.server.rest.batch.NonStreamingBatchOperations.performBatchJobs( NonStreamingBatchOperations.java:48)',u'org.neo4j.server.rest.web.BatchOperationService.batchProcess(BatchOperationService.java:117)',u'org.neo4j.server.rest.web.BatchOperationService.performBatchOperations(BatchOperationService。 java:71)',u'java.lang.reflect.Method.invoke(Method.java:616)'],u'message':你'{\ n“message”:“输入字符串:\”{0 } \“”,\ n“异常”:“BadInputException”,\ n“stacktrace”:[“org.neo4j.server.rest.web.RestfulGraphDatabase.extractNodeId(RestfulGraphDatabase.java:162)”,“org.neo4j。 server.rest.web.RestfulGraphDatabase.extractNodeIdOrNull(RestfulGraphDatabase.java:151)”, “org.neo4j.server.rest.web.RestfulGraphDatabase.addToRelationshipIndex(RestfulGraphDatabase.java:813)”,“java.lang.reflect.Method.invoke(Method.java:616)”,“org.neo4j.server.web .Jetty6WebServer.invokeDirectly(Jetty6WebServer.java:273)“,”org.neo4j.server.rest.batch.NonStreamingBatchOperations.invoke(NonStreamingBatchOperations.java:55)“,”org.neo4j.server.rest.batch.BatchOperations.performRequest (BatchOperations.java:178)“,”org.neo4j.server.rest.batch.BatchOperations.parseAndPerform(BatchOperations.java:149)“,”org.neo4j.server.rest.batch.NonStreamingBatchOperations.performBatchJobs(NonStreamingBatchOperations.java :48)“,”org.neo4j.server.rest.web.BatchOperationService.batchProcess(BatchOperationService.java:117)“,”org.neo4j.server.rest.web.BatchOperationService.performBatchOperations(BatchOperationService.java:71)“ ,“java.lang.reflect.Method.invoke(Method.java:616)”]​​ \ n}',u'exception':u'BatchOperationFailedException'}

基于'Bad Input Exception',我很确定start_node和end_node参数存在问题。基本上,我想引用之前的get_or_create节点和关系。你如何在批次中引用这些?

更新:经过多次实验,我已经缩小了重现此错误的可能方法 - 如果get_or_create中的任何一个节点已经存在于图中,则批处理操作失败,并且对应于索引的索引输入错误现有节点。我还更新了代码以准确显示我的运行情况。第一次运行此代码成功(图中没有两个节点)。再次运行失败。

py2neo版本:1.5

neo4j版本:1.8.2

1 个答案:

答案 0 :(得分:0)

使用您的确切代码,我无法使用py2neo 1.5和Neo4j 2.0.0-M03重现该问题。你能澄清一下你正在使用哪个版本的py2neo和Neo4j吗?