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
,
Это в основном решение, где я использую абсолютные идентификаторы, а не относительные....