Neo4j - проблема моделирования отношений - PullRequest
0 голосов
/ 05 июня 2018

У меня есть 2 CSV-файла, экспортированных из mysql:

# Заголовки CSV болезни # Идентификатор мастера болезни (автоинкремент, pk) Имя_защиты

# Тесты Заголовки CSV # Идентификатор мастера теста (автоинкремент, ПК)), test_name, parent_disease_ID (указывает на столбец ID в Disease.
Master tbl)

Я запускаю следующие команды шифрования:

    LOAD CSV WITH HEADERS FROM.   
   "http://localhost/disease_mstr.csv" AS line
    MERGE (d:Disease {did: toInteger(line.ID),  diseasename: 
    line.disease_name})

    LOAD CSV WITH HEADERS FROM.  
   "http://localhost/test_mstr.csv" AS line
    MERGE (d:Tests {tid: toInteger(line.ID),  testname: 
    line.test_name, did: toInteger(line.parent_disease_ID)})

   MATCH (t:Tests), (d:Disease) CREATE (t:Tests)- 
   [r:TEST_FOR]->(d:Disease) RETURN t, r, d

Выше шифра возвращает одну болезнь, связанную со многими тестами, тогда какя хочу только наоборот!Может кто-нибудь поправить меня?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

[EDITED]

В запросе, который создает отношения, необходимо отфильтровать для Tests и Disease узлов, которые имеют одинаковое значение did:

MATCH (t:Tests), (d:Disease)
WHERE t.did = d.did
MERGE (t)-[r:TEST_FOR]->(d)
RETURN t, r, d;

Этот запрос также заменил CREATE на MERGE, чтобы избежать дублирования отношений TEST_FOR между одной и той же парой t и d.Если у вас уже есть такие дубликаты отношений, сначала удалите их.

Кроме того, для эффективности следует рассмотреть возможность создания в index для :Disease(did) или :Tests(did) - в зависимости от того, какое из них имеет наибольшее количествоэкземпляры.

0 голосов
/ 05 июня 2018

Вы можете создать узлы заболевания, узлы теста и взаимосвязь между узлом теста и заболеванием за один проход файла тестов.

LOAD CSV WITH HEADERS 
FROM "http://localhost/test_mstr.csv" 
AS line
MERGE (disease:Disease {did: toInteger(line.parent_disease_ID)})
MERGE (test:Tests {tid: toInteger(line.ID), testname: 
line.test_name})
MERGE (test)-[r:TEST_FOR]->(did)

И затем обновить имена болезней после факта во втором проходе.

LOAD CSV WITH HEADERS 
FROM "http://localhost/disease_mstr.csv" AS line
MERGE (d:Disease {did: toInteger(line.ID)})
SET d.diseasename = line.disease_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...