Neo4j Cypher-使用LOAD CSV创建节点和设置标签
我尝试使用LOAD CSV创建节点,将标签设置为CSV中的值。可能吗?我正在尝试类似的东西:Neo4j Cypher-使用LOAD CSV创建节点和设置标签,csv,neo4j,cypher,load-csv,Csv,Neo4j,Cypher,Load Csv,我尝试使用LOAD CSV创建节点,将标签设置为CSV中的值。可能吗?我正在尝试类似的东西: LOAD CSV WITH HEADERS FROM 'file:///testfile.csv' AS line CREATE (x:line.label) …但我得到一个无效的语法错误。有什么方法可以做到这一点吗?不幸的是,不支持参数化标签 Chris您可以做一个变通方法-创建所有节点,然后对其进行筛选,创建所需的节点,然后删除这些旧节点 LOAD CSV WITH HEADERS FROM 'f
LOAD CSV WITH HEADERS FROM 'file:///testfile.csv' AS line
CREATE (x:line.label)
…但我得到一个无效的语法错误。有什么方法可以做到这一点吗?不幸的是,不支持参数化标签
Chris您可以做一个变通方法-创建所有节点,然后对其进行筛选,创建所需的节点,然后删除这些旧节点
LOAD CSV WITH HEADERS FROM 'file:///testfile.csv' AS line
CREATE (tmp:line[1])
WITH tmp
CREATE (x:Person {name: labels(tmp)[0]})
WITH tmp
REMOVE tmp
将其粘贴到中以查看示例:
LOAD CSV
WITH HEADERS FROM "http://docs.neo4j.org/chunked/2.1.2/csv/import/persons.csv" AS csvLine
CREATE (p:tmp { id: toInt(csvLine.id), name: csvLine.name })
WITH p
CREATE (pp:Person { name: labels(p)[0]})
WITH p, pp
DELETE p
RETURN pp
二便士
首先,使用Java批导入应用程序很容易做到这一点,编写它们也不难。看见您可以使用读取CSV文件
如果您更愿意使用Cypher,并且如果您有一组有限的标签可以使用,那么您可以这样做:
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM 'file:///testfile.csv' AS LINE
CREATE (n:load {lab:line.label, prop:line.prop});
CREATE INDEX ON :load(lab);
MATCH (n:load {lab:'label1'})
SET n:label1
REMOVE n:load
REMOVE n.lab;
MATCH (n:load {lab:'label2'})
SET n:label2
REMOVE n:load
REMOVE n.lab;
恩典与和平
Jim我环顾四周看了几个这样的问题,得出结论,一个简单明了的方法可以处理这些复杂的问题,即无法通过“加载CSV”轻松添加动态标签,只需使用您最喜欢的编程语言来读取CSV行,并生成Cypher语句的文本输出文件,该文件将生成所需的Neo4j节点/边缘结构。然后,您还可以直接编辑文本文件,以修改您想要进一步自定义命令的内容 我个人使用Java,因为我最熟悉Java。我将CSV的每一行读取到一个自定义对象中,该对象表示CSV文件中的一行。然后,我将一行内容打印到一个文件中,以反映我想要的密码语句。然后我所要做的就是将这些命令剪切并粘贴到Neo4j浏览器命令行中
通过这种方式,您可以随心所欲地构建命令,并且可以完全避免使用Cypher“加载CSV”命令的限制此设置如何使用CSV中的数据创建节点标签?据我所知,这只是从CSV添加一个属性,而不是标签本身——所有创建的节点都有“Person”标签。@LucasLima是的,它应该只创建一个属性,而不是标签。在编写此答案时,neo4j中的节点标签不可用(它是在版本2中引入的),只有关系标签。这就是为什么我在回答中提到了解决办法。当然,今天您可以直接为节点添加标签