объединить узлы на основе общего свойства и добавить все свойства в начальный узел - PullRequest
0 голосов
/ 04 марта 2019

На этом изображении вы можете увидеть все свойства узла, чего я хочу добиться - объединить узлы на основе 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 голосов
/ 04 марта 2019

Сначала запустите это, чтобы создать ограничение уникальности и добавить индекс для свойства id Disease. [ВАЖНО]

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
0 голосов
/ 04 марта 2019

Я могу показать вам более простой пример того, что я хочу 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-файл, чтобы получить данные, если я использую слияние (вместо создания)или ограничение, я потеряю свойства.

Мне нужно найти способ создания узлов без потери данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...