csv为三国关系来源dataset/data/data/三国演义/triples.csv at master · really-code/dataset (github.com)
head tail relation label 0 关羽 刘备 younger_sworn_brother 义弟 1 张飞 刘备 younger_sworn_brother 义弟 2 关羽 张飞 elder_sworn_brother 义兄 3 张苞 张飞 son 儿子 4 关兴 关羽 son 儿子
CSV文件包含以下列:
head
: 表示起始节点的名称tail
: 表示目标节点的名称relation
: 表示起始节点和目标节点之间的关系的名称label
: 表示关系的标签
根据这个结构,我们可以修改Cypher脚本,使其能够导入这个CSV文件的数据到Neo4j数据库中。以下是修改后的Cypher脚本:
cypher
复制
LOAD CSV WITH HEADERS FROM "file:///triples.csv" AS row
MATCH (from:Entity {name: row.head}), (to:Entity {name: row.tail})
MERGE (from)-[r:RELATION {relation: row.relation, label: row.label}]->(to)
请注意,此脚本假定数据库中已经存在名称为 Entity
的节点,并且这些节点的 name
属性对应于CSV文件中的 head
和 tail
列。如果数据库中还没有这些节点,你需要先创建它们。
现在,你可以将这个脚本复制到Neo4j的浏览器界面中的查询编辑器中,然后执行它来导入数据。在执行之前,请确保Neo4j数据库正在运行,并且你有足够的权限来执行导入操作。同时,请确保CSV文件位于Neo4j实例的导入目录中。如果你需要进一步的帮助,请告诉我。
用户_QsrjwB
(no changes, no records)
如果你在尝试导入数据到Neo4j数据库时发现 “no changes, no records”,这通常意味着Cypher查询没有找到任何匹配的节点,因此没有创建任何新的节点或关系。这个问题可能是由于以下几个原因:
- 数据库中可能不存在与CSV文件中的
head
和tail
列匹配的节点。 - CSV文件的路径可能不正确,或者文件可能没有正确上传到Neo4j的导入目录。
- Cypher查询可能存在语法错误或逻辑错误。
为了解决这个问题,我们可以采取以下步骤:
- 确保CSV文件已经被正确上传到Neo4j实例的导入目录中。
- 修改Cypher查询,以便在找不到匹配节点时创建这些节点。
以下是修改后的Cypher脚本,它会在找不到匹配节点时创建这些节点:
cypher
复制
LOAD CSV WITH HEADERS FROM "file:///triples.csv" AS row
MERGE (from:Entity {name: row.head})
MERGE (to:Entity {name: row.tail})
MERGE (from)-[r:RELATION {relation: row.relation, label: row.label}]->(to)
这个脚本使用了 MERGE
而不是 MATCH
,这意味着如果数据库中不存在与 row.head
和 row.tail
匹配的节点,Neo4j将会创建这些节点。然后,它创建一个从 from
节点到 to
节点的 RELATION
类型关系,并设置关系的 relation
和 label
属性。
请确保将上述脚本中的 file:///triples.csv
替换为实际的文件路径。在Neo4j的导入目录中,可以省略文件协议前面的部分,所以脚本应该看起来像这样:
LOAD CSV WITH HEADERS FROM "file:/triples.csv" AS row
MERGE (from:Entity {name: row.head})
MERGE (to:Entity {name: row.tail})
MERGE (from)-[r:RELATION {relation: row.relation, label: row.label}]->(to)
现在,你可以将这个脚本复制到Neo4j的浏览器界面中的查询编辑器中,然后执行它来导入数据。