Не могу сделать взаимосвязь между двумя свойствами узла в NEO4J динамически - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь построить отношения между 2 свойствами в graphdb.У меня есть CSV-файл, подобный этому

RELATIONSHIP,AGENTID,CUSTOMERID,TXNID,TIMESTAMP,AMOUNT,CHANNEL
hasrelation,17956,2025,6C13MXSESN,2019-03-01T11:52:08,1000,USSD
hasrelation,17957,2026,6C13MXSEVF,2019-03-01T11:52:09,5000,BAPP

В моем Neo4j GUI я создал два узла АГЕНТ и ЗАКАЗЧИК отдельно для АГЕНТА

ID,SHOPNAME,DIVISION,DISTRICT,THANA

17956,CONNECT DISTRIBUTION,DHAKA,GAZIPUR,Gazipur Sadar
17957,HUMAYUN KABIR,DHAKA,DHAKA,Demra

для узла клиента

ID,DIVISION,DISTRICT,THANA,REGDATE,APPREGDATE
2025,KHULNA,JESSORE,JESSORE SADAR,2019-02-14,
2026,DHAKA,TANGAIL,KALIHATI,2017-02-10

последний столбец в этом случае пуст

Итак, я написал запрос по ссылке сообщества Neo4J

LOAD CSV WITH HEADERS FROM "file:///test.csv" AS row
MATCH (f:Agent), (s:Customer)
WHERE f.ID = row.AGENTID
AND s.ID = row.CUSTOMERID
CALL apoc.create.relationship(f, row.RELATIONSHIP,{}, s) YIELD rel
return rel

, но между ними не создано никакой связи. Так как я очень новичок в neo4jлюбезно предложите мне, что мне здесь не хватает, и помогите мне решить эту проблему

1 Ответ

0 голосов
/ 24 июня 2019

Ваш синтаксис выглядит правильно, поэтому я бы попытался подтвердить, что ваши операторы соответствия работают так, как вы ожидаете.

В зависимости от того, как вы создали свои тестовые узлы, эти условные проверки:

WHERE f.ID = row.AGENTID
AND s.ID = row.CUSTOMERID

может быть проблема.Функция load_csv сначала обрабатывает все, что загружает, как строки, но вы могли создать узлы с целочисленными идентификаторами.

Попробуйте:

WHERE f.ID = toInteger(row.AGENTID)
AND s.ID = to.Integer(row.CUSTOMERID)

Если это не сработает, вы можетепопробуйте заменить операторы MATCH на MERGE, что поможет подтвердить источник проблемы (не забудьте очистить дублирующиеся узлы, если вы идете по этому пути).

...