Neo4j合并文本文件中的属性

时间:2018-06-15 12:00:57

标签: neo4j cypher

是否可以将文本文件中的属性与neo4j中的现有节点合并?我的文本文件采用id,property的形式。 id与我在neo4j中已有的节点相匹配。我试图将所有具有id的节点类型与文本文件的id匹配,并添加新属性。我现在尝试了这个,但它需要永远完成。此外,我可以在不仅仅是歌曲节点的所有节点上进行 - 我只是把它留作MATCH(c)吗?

USING PERIODIC COMMIT 500
LOAD CSV FROM 'file:///page_rank.txt' AS  line 
MATCH (c:Songs)
WHERE c.id=toInt(line[0]) 
SET c.pageRank = toFloat(line[1])

2 个答案:

答案 0 :(得分:1)

是的,这是可能的。

假设我的数据库中有四个现有节点:

(a:Person {id: 01})

(b:Person {id: 02})

(c:Person {id: 03})

(d:Dog {id: 04})

让我们说我想合并一些属性 - 我不想创建新节点 - 只需将这些属性添加到现有节点即可。

所以我有一个名为' nodes_prop.csv'的CSV文件。看起来如下:

id,property
01,blue
02,green
03,grey
04,black

如果我想使用合并(听起来像你可能只是使用MATCH - SET用于你的用例)来匹配节点的id并设置属性(基于CSV文件中的值),无论节点的标签如何,我都可以使用以下密码查询:

LOAD CSV WITH HEADERS FROM "file:///nodes_prop.csv" AS line
MERGE (a {id: toInteger(line.id)})
ON MATCH SET a.eye_color=line.property
RETURN *;

答案 1 :(得分:0)

它可能的原因"永远完成"是因为:Song(id)上没有an index,因此MATCH/WHERE子句必须扫描Song节点以查找每个id

您可以通过以下方式创建所需的索引:

CREATE INDEX ON :Song(id)

但是,如果您想要进行基本相同的查询,但对于所有节点(不仅仅是Song个节点),您将无法使用" normal"索引,如上所述。相反,为了获得良好的性能,您需要使用explicit indexes,这需要您付出更多努力才能使用。