我有一个XML文件,我希望在Neo4j中可视化(作为具有互连节点的图形)。 XML文件具有以下层次结构:
<Organism>
<Enzyme>
<Motif>
我成功创建了整个图表。当我完成后,我意识到很多时候不同的organisms
有一个共同的enzyme
或两个不同的enzymes
有共同的motifs
。现在,我的图表中存在大量冗余,多次出现类似的enzymes
或motifs
。是否有更简单的方法可以删除除1个节点之外的所有(enzyme or motif
),然后将其连接到不同的节点?或者我必须从头开始?
我的CREATE语句如下所示:
CREATE (jejunistrain81176:Organism { name: "Campylobacter jejuni strain 81-176" })
CREATE (jejunistrain81176_e1:Enzyme { name: "CjeFIII" })
CREATE (jejunistrain81176_m1:Motif { name: "GCAAGG" })
CREATE UNIQUE (jejunistrain81176)-[:HAS_ENZYME]->(jejunistrain81176_e1)
CREATE UNIQUE (jejunistrain81176_e1)-[:HAS_MOTIF]->(jejunistrain81176_m1)
我尝试用CREATE
替换所有MERGE
,但它给了我以下错误:
Invalid input '(': expected whitespace, comment, '=', node labels, MapLiteral, a parameter, a relationship pattern, ON, LOAD CSV, START, MATCH, UNWIND, MERGE, CREATE, SET, DELETE, REMOVE, FOREACH, WITH, RETURN, UNION, ';' or end of input (line 21, column 14)
答案 0 :(得分:0)
使用merge替换create和create unique应该可以正常工作。
您必须为:标签(名称)对创建索引或约束。
我认为您更快地重新导入数据,如果您想要删除和重新连接节点,您需要知道您正在查看哪些关系。
类似的东西:
MATCH (e:Enzyme)
WITH e.name as name, count(*) as cnt, collect(e) as enzymes
where cnt > 1
WITH enzymes[0] as first, enzymes[1..] as remove
UNWIND remove as enzyme
MATCH (enzyme)<-[rel:HAS_ENZYME]-(organism)
MERGE (first)<-[newRel:HAS_ENZYME]-(organism) ON CREATE SET newRel = rel
DELETE rel
WITH distinct first, enzyme
MATCH (enzyme)-[rel:HAS_MOTIV]->(motiv)
MERGE (first)-[newRel:HAS_MOTIV]->(motiv) ON CREATE SET newRel = rel
DELETE rel
DELETE enzyme;