根据通用属性合并节点,并将所有属性添加到初始节点

时间:2019-03-04 08:06:26

标签: neo4j cypher

在此图中,您可以看到一个节点的所有属性,我想要实现的是基于CUI(id)合并节点并将这些属性添加到一个初始节点。

In this image you can see all the properties from a node, what I want to achieve is to merge the nodes based on CUI (id) and add those properties to one initial node

我尝试了

START first=node(*), second=node(*) 
WHERE exists (first.id) and exists (second.id) 
WITH first, second
SKIP 20000 LIMIT 20000
WHERE first.id= second.id
SET first=second; 

但没有任何变化

然后我尝试致电APOC

match (f:Disease),(b:Disease) where f.id=b.id 
CALL apoc.refactor.mergeNodes([f,b]) yield node 
return "none";

这给我一个错误

  

ServiceUnavailable:WebSocket连接失败。由于安全   限制在您的网络浏览器中,失败的原因不是   可用于此Neo4j驱动程序。请使用您的浏览器开发   控制台确定失败的根本原因。常见原因   使用错误的连接URL包含数据库不可用   或暂时的网络问题。如果启用了加密,请确保   您的浏览器配置为信任Neo4j证书   配置使用。 WebSocket readyState是:3

有人可以帮助进行合并节点并添加属性的查询,这样我就不会丢失信息吗?

2 个答案:

答案 0 :(得分:1)

首先,运行此命令以创建唯一性约束,并在Disease的id属性上添加索引。 [重要]

CREATE CONSTRAINT ON (d:Disease) ASSERT d.id IS UNIQUE

然后运行以下查询以加载数据。 如果不存在该节点,则会创建该节点并设置属性。 如果该节点已经存在,它将附加值。

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM 'file:///ConditionConcepts.csv' AS line FIELDTERMINATOR '\t'
MERGE (disease:Disease {id: line.CUI}) 
ON CREATE SET 
    disease.name_doctor = line.name, 
    disease.relevance = line.cui_relevance, 
    disease.trials = line.trials_count, 
    disease.search = line.search_frequency, 
    disease.select = line.select_frequency
ON MATCH SET
    disease.name_doctor = disease.name_doctor+", "+line.name, 
    disease.relevance = disease.relevance+", "+line.cui_relevance, 
    disease.trials = disease.trials+", "+line.trials_count, 
    disease.search = disease.search+", "+line.search_frequency, 
    disease.select = disease.select+", "+line.select_frequency

答案 1 :(得分:0)

我可以向您展示我想要的this is the initial situation, all id are the same

的简单示例

应用以下查询后

MATCH (o:Disease),(b:Disease) 
WHERE o.id=b.id and o<>b and o.name_doctor<>b.name_doctor 
SET o.name_doctor=o.name_doctor+", "+b.name_doctor 
RETURN o,b;

我将得到这个结果

after applying the query

但这不是我想要的,最后,我需要一个节点具有其他节点的属性,例如ideal situation

也许在创建时有一种方法,我必须加载CSV文件才能拥有数据,如果我使用合并(而不是创建)或约束,则会丢失属性。

我需要找到一种在不丢失任何数据的情况下创建节点的方法。