Создайте ребро на основе значения столбца в CSV в neo4j - PullRequest
1 голос
/ 04 апреля 2019

У меня есть два CSV-файла. Первый файл user_features.csv содержит «узлы» и их 14 функций, таких как:

node_id,f1,f2,f3,f4,....f13 

1045,   2, 3,  4, 5,.... 31    
5042,   1, 2,  3, 4,.....25

Мне удалось загрузить это в Neo4j, используя следующее:

using commit periodic 10000
load csv with headers from "file:///user_features.csv" as linecsv
create (n:user_features {name: linecsv.node_id, f1: linecsv.f1 .....})

Теперь у меня есть второй файл с именем train.csv, данные которого имеют следующую форму:

node1_id,node2_id,is_related

1045,5042,1  
1045,134,0

Здесь поле 'is_related' предполагает наличие связи между node1_id и node2_id.

Я хочу установить связь на загруженном графике, используя эти данные. Но я не могу понять, как использовать значение поля is_related. Будет ли в этом сценарии полезен пункт «Где»?

Есть еще один способ, где я изменил файл "train.csv", отфильтровав поле is_related = field = 1 в базе данных графа, и это работает.

Но можно ли использовать значение столбца is_related для создания ребра между узлом 1 и узлом 2 на графике?

1 Ответ

1 голос
/ 04 апреля 2019

Кажется странным, что файл CSV беспокоит наличие строк со значением is_related, равным 0, если предполагается, что вы ничего не делаете с такими строками. Почему бы просто не оставить эти строки (и полностью исключить столбец is_related)?

Однако, если вы действительно хотите создать, скажем, RELATED_TO отношение, когда is_related равно 1, вы можете сделать что-то вроде этого:

LOAD CSV WITH HEADERS FROM "file:///train.csv" AS row
WITH row
WHERE row.is_related = 1
MATCH (n:user_features {name: row.node1_id}), (m:user_features {name: row.node2_id})
MERGE (n)-[:RELATED_TO]->(m)

Кроме того, этот запрос будет быстрее, если у вас есть index на :user_features(name).

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