neo4j: отношения импорта партии

У меня проблемы с импортом отношений на графике.

Допустим, у меня есть несколько сотен уникальных проиндексированных пользователей, которые уже созданы. Затем я хотел бы создать около 120 тыс. Узлов, каждый из которых связан с каким-либо пользователем через отношения.

К сожалению, я не могу найти способ пакетного импорта. Я пытаюсь сделать это с помощью neography ruby gem, но, поскольку я очень новичок в этой среде, я не против использовать другой способ, если это необходимо.

Что я пробовал:

@neo.batch(
  [:get_node_index, 'user', 'user_id', '1'], #attempt to get the node from index
  [:create_node, {"foo => 'bar'}],
  [:create_relationship, "has" , "{0}", "{1}"] 
) # => fails

,

@neo.batch(
  [:create_unique_node, "user", "user_id", "1"], #attempt to create or get the node
  [:create_node, {"foo" => "bar"}],
  [:create_relationship, "has", "{0}", "{1}"]
) # => fails. 

Пожалуйста, обратите внимание, что, тем не менее, есть возможность create_unique_node команды одни.

Единственный способ запустить скрипт - использовать

@neo.batch(
  [:create_node, {"user_id" => 1}], #works, but duplicates the node
  [:create_node, {"foo" => "bar"}],
  [:create_relationship, "has", "{0}", "{1}"]
) # => success

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

Любая помощь будет высоко ценится, спасибо заранее

1 ответ

Решение

Так как этот вопрос был поставлен на голосование, я публикую обходной путь, который я нашел с тех пор:

Как уже упоминалось в вопросе, можно create_unique_node создать узлы. batch Затем команда возвращает список указателей, в которых вы можете получить идентификаторы neo4j каждого узла. Я не уверен, чтобы вспомнить, пришлось ли мне извлекать идентификаторы из какой-то хеш-структуры или нет, но я уверен, что вы поймете это.

Итак, в основном, я сначала создал пакет и сохранил результат в массиве:

ids = @neo.batch(
    # list of `create_nodes` commands
) #=> returns a list of neo4j ids that you can use further.

Чтобы связать узлы, я использовал вторую пакетную команду. Вместо того, чтобы использовать провал {id} ссылка, вы можете просто использовать (абсолютный) neo4j id узлов, так что это будет выглядеть

[:create_relationship, "something", id1, id2]

где id1 а также id2 даны ids,

Это в основном решение, где я использую абсолютные идентификаторы, а не относительные....

Другие вопросы по тегам