Создание отношений один ко многим в neo4j - PullRequest
0 голосов
/ 26 февраля 2019

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

Итак, у меня есть исходный набор данных, который представляет собой CSV, который выглядит следующим образом:

enter image description here

Поскольку в некоторых полях есть точки с запятой, я разделил их и проанализировал в новом CSV.(В основном сделано каждая комбинация полей)

Новый CSV выглядит так:

enter image description here

Выше изображение только что показано для N2, я сделал то же самое для N1 и N3.

Теперь мне нужно создать узлы и отношения таким образом, чтобы каждый

  • Name ЗНАЕТ Language
  • Name WORKED_WITH Database.

Следовательно, я запустил следующий запрос:

LOAD CSV WITH HEADERS FROM "file:///data.csv" AS row
CREATE (n:Name {name: row.Name})
CREATE (l: Language {language: row.Language})
CREATE (d: Database {database: row.Database})
CREATE (n)-[:KNOWS]->(l)
CREATE (n)-[:WORKED_WITH]->(d)

Это следующий вывод, который я получаю:

enter image description here

Отображается только для N2 узлов

Поскольку я хочу создать рекомендацию, моя идея заключалась в том, чтобы связать name с language и database.

Ожидаемый результат:

enter image description here

Я хочу связать его таким образом, чтобы я мог посчитать общее количество входящих узлов на языке или базе данных, чтобы рекомендовать его.

Может кто-нибудь сказать мне, где я иду не так?

1 Ответ

0 голосов
/ 26 февраля 2019

При использовании предложения CREATE каждый раз создаются новые узлы .

Если вы хотите использовать существующий узел и создавать только, если он не существует , тогда вам нужно использовать предложение MERGE вместо CREATE .

Вот ваш запрос с MERGE:

LOAD CSV WITH HEADERS FROM "file:///data.csv" AS row
MERGE (n:Name {name: row.Name})
MERGE (l: Language {Language: row.Language})
MERGE (d: Database {database: row.Database})
MERGE (n)-[:KNOWS]->(l)
MERGE (n)-[:WORKED_WITH]->(d)
...