在neo4j的批量导入中,将ID设为整数会导致关系导入出错。

3
我使用Neo4j的admin-import工具来批量导入CSV格式的数据。在标题中,我使用整数作为ID数据类型[journal:ID:int(Journal-ID)],导入节点的部分运行良好。当导入工具到达关系时,我收到了缺少引用节点的错误。看起来似乎关系导入正在搜索字符串格式的ID。我已经尝试在关系文件中更改ID的类型,但是遇到了其他错误。我找不到指定关系文件中ID为int的方法。
这里是一个最小化的例子。假设我们有两种节点类型,分别具有以下标题:
journal:ID:int(Journal-ID)

and

documentID:ID(Document-ID),title

还有示例文件 journal.csv:

"123"
"987"

以及 document.csv:

"PMID:1", "Title"
"PMID:2", "Other Title"

我们还有一个与标题相关的关系“hasDocument”:
:START_ID(Journal-ID),:END_ID(Document-ID)

还有示例文件relation.csv:

"123", "PMID:1"

在运行导入时,我收到了以下错误:
Error in input data
Caused by:123 (Journal-ID)-[hasDocument]->PMID:1 (Document-ID) referring to missing node 123

我尝试将关系头指定为:

:START_ID:int(Journal-ID),:END_ID(Document-ID)

但这也会产生错误。

启动导入的命令是:

neo4j-admin import --nodes:Document="document-header.csv,documentNodes.csv" --nodes:Journal="journal-header.csv,journalNodes.csv" --relationships:hasDocument="hasDocument-header.csv,relationsHasDocument.csv"

有没有一种方法可以在关系文件中将ID指定为整数,或者有其他解决方案?

1个回答

1

似乎不支持此功能。文档中未提及,代码中也没有这样的测试用例

您可以使用字符串ID导入数据,并在启动数据库后进行转换。

MATCH (j:Journal)
SET j.id = toInteger(j.id)

如果你的数据集很大,你可以使用apoc和迭代:
call apoc.periodic.iterate("
MATCH (j:Journal) RETURN j
","
SET j.id = toInteger(j.id)
",{batchSize:10000})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接