Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher-使用LOAD CSV创建节点和设置标签_Csv_Neo4j_Cypher_Load Csv - Fatal编程技术网

Neo4j Cypher-使用LOAD 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创建节点,将标签设置为CSV中的值。可能吗?我正在尝试类似的东西:

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中引入的),只有关系标签。这就是为什么我在回答中提到了解决办法。当然,今天您可以直接为节点添加标签