Neo4j - Граф нули - PullRequest
       9

Neo4j - Граф нули

1 голос
/ 15 мая 2019

Я создаю узлы и отношения в Neo4j через CSV.У меня есть три столбца, 2 из них имеют нулевые значения.Каждый раз, когда я помещаю 'WHERE NOT line.column_name IS null', он не дает график для других заполненных узлов.Похоже, это не включает эту строку вообще, где есть ноль.Я новичок в понятиях шифрования и построения графических баз данных.

Пример данных CSV:

manager_name,contractor_name,company_name
"John Smith","Matt Potter",Google
"John Smith","Ann Potter",Google
"Andy Jacobs","Matt Potter",Apple
"Seth Jacobs","Mike Smith",
"Seth Jacobs",,LinkedIn

Запрос с использованием:

LOAD CSV WITH HEADERS FROM "file:///sample2.csv" AS line
WITH line WHERE NOT line.company_name IS NULL
WITH line WHERE NOT line.contractor_name IS NULL
MERGE (mn:manager_name {name:line.manager_name})
MERGE (cn:contractor_name {name:line.contractor_name})
MERGE (cpn:company_name {name:line.company_name})
MERGE (mn)-[:KNOWS]->(cn)
MERGE (cn)-[:AFFILIATED]->(cpn)

Вывод Вопрос: Учитывая отношения, которые я создал, я думаю, для меня очевидно, почему этоне будет создавать узлы для "Seth Jacobs",,LinkedIn, потому что для имя_подрядчика есть нольНо как мне установить соединение "Seth Jacobs","Mike Smith",, пока здесь не указано значение_тракта?

Seth Jacobs -- KNOWS --> Mike Smith

Нужно ли заполнять все строки, чтобы создать узлы в neo4j?Это изображение, которое я получаю из запроса / слияния / загрузки сверху.

enter image description here

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

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

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

Другой вариант (наиболее вероятный в будущем) состоит в том, чтобы иметь несколько отдельных CSV, по одному на тип узла, а затем CSV на отношение.

0 голосов
/ 16 мая 2019

Процедура APOC apoc.do.case будет полезна здесь.

LOAD CSV WITH HEADERS FROM "file:///sample2.csv" AS line
MERGE (mn:manager_name {name: line.manager_name})
WITH mn, line
CALL apoc.do.case(
  [line.contractor_name IS NOT NULL AND line.company_name IS NOT NULL,
     "MERGE (cn:contractor_name {name:line.contractor_name})
      MERGE (cpn:company_name {name:line.company_name})
      MERGE (mn)-[:KNOWS]->(cn)
      MERGE (cn)-[:AFFILIATED]->(cpn)
      RETURN cn, cpn",
   line.contractor_name IS NOT NULL,
     "MERGE (cn:contractor_name {name:line.contractor_name})
      MERGE (mn)-[:KNOWS]->(cn)
      RETURN cn"
  ],
  '',
  {mn: mn, line: line}) YIELD value AS result
RETURN mn, result

В этом примере запроса возвращаемое result будет:

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