Gremlin Через java чтение внешней вершины JSON и добавление к существующему открытому графу дает исключение, предоставленное недействительной вершиной?

Я пытаюсь прочитать внешнюю вершину JSON и добавить ее к выходу из открытого графа титанов. следующим образом:

gremlin> newVertex = graph.io(GraphSONIo.build()).reader().create().readVertex(new FileInputStream("/tmp/sample_vertex.json"),null);
gremlin> v[42092]
gremlin> existingVertex = graph.V(4145).next();
gremlin> v[4145]
gremlin> existingVertex.addEdge("has",newVertex);
Invalid vertex provided: v[42092]

Я уже экспортировал вершину с помощью GraphSON.io следующим образом:

gremlin> graph.io(GraphSONIo.build()).writer().create().writeVertex(new FileInputStream("/tmp/sample_vertex.json"),g.V().next());

person MAYUR KUMBHAR    schedule 13.02.2017    source источник


Ответы (1)


Подпись для readVertex выглядит так:

Vertex readVertex(InputStream inputStream, Function<Attachable<Vertex>, Vertex> vertexAttachMethod)

Если вы подставите null к vertexAttachMethod, то не будет предпринята попытка присоединить вершину к вашему графу, и в результате вы просто получите неприсоединенный StarVertex. Вместо этого рассмотрите этот подход:

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> start = graph.io(GraphSONIo.build()).reader().create().readVertex(new FileInputStream('v.json'), Attachable.Method.create(graph))
==>v[1]
gremlin> gremlin> g.V(start).as('start').
......1>   addV().as('end').
......2>   addE('has').from('start').to('end')
==>e[1][1-has->0]
person stephen mallette    schedule 13.02.2017
comment
Спасибо за ответ. Это сработало для меня. но я получаю вершину без ее inE {} и outE {}. это то, что я должен перенастроить края вручную.? @стефен-маллетт - person MAYUR KUMBHAR; 14.02.2017
comment
Если нужны края, то их тоже нужно прикрепить. См. другую перегрузку readVertex, которая имеет edgeAttachMethod. - person stephen mallette; 14.02.2017
comment
хорошо. Я попробую. Например, еще одна вещь: я экспортировал 3 вершины, между которыми есть ребра, в json, который экспортирует 3 разные вершины json. и снова я импортировал 3 экспортированные вершины в другой граф, но проблема в том, что ребра не сохраняются, и через JAVA я реализовал, но в графе его фактически не было. Так мне нужно зафиксировать после добавления? - person MAYUR KUMBHAR; 14.02.2017
comment
а добавление вершины с readVertex добавит новую id() в вершину графа. и если мы импортировали две вершины и между ними есть ребро, то как перегруженный readVertex() с edgeAttachMethod создаст точное ребро между ними?? - person MAYUR KUMBHAR; 14.02.2017
comment
да - вы должны сами контролировать коммиты при вызовах readVertex. edgeAttachMethod - это просто функция. Он принимает Attachable<Edge> в качестве параметра. Edge на самом деле является StarEdge, который должен предоставить вам достаточно информации, чтобы написать функцию для поиска связанных вершин в новом графе, а затем записать ребро и свойства между ними. Вы не совсем точно говорите, каков ваш вариант использования, но вы можете не найти этот метод особенно быстрым в зависимости от того, что вы делаете. - person stephen mallette; 14.02.2017
comment
хорошо. На самом деле мой вариант использования: я хочу экспортировать 3-4 вершины, между которыми есть ребра, в один файл JSON. Так что я могу импортировать и перенастраивать те же 3-4 вершины и ребра в другом графе или в том же графе, если я проиграл. в настоящее время я делаю экспорт каждой вершины в отдельный файл JSON и импортирую одну за другой и вручную добавляю ребра между ними. проблема в том, что мне нужно написать сложную логику ребер, чтобы перенастроить ребра и сделать эти вершины такими, какими они были ранее в графе. - person MAYUR KUMBHAR; 15.02.2017
comment
ну, если это ваш вариант использования, то я бы, вероятно, не пытался использовать readVertex таким образом. я не знаю, есть ли простой способ сделать то, о чем вы просите - вы уже упоминали о проблемах при этом. Я скажу, что вариант использования не похож на тот, с которым я когда-либо сталкивался раньше. Мне непонятно, зачем вам нужно делать что-то подобное. Я не уверен, почему вершины/ребра могут быть потеряны из графа. - person stephen mallette; 15.02.2017
comment
На самом деле дело в том, что у двух пользователей есть отдельные графы, и, скажем, пользователь 1 хочет, чтобы объект имел 3-4 вершины и ребра между ними из графа user2. поэтому я экспортирую два объекта графа пользователя, имеющие 3-4 вершины и связанные с ним ребра. и импортировать в график user1. - person MAYUR KUMBHAR; 15.02.2017
comment
Я понимаю. Ну, я полагаю, вы застряли со сложностями переноса подграфа между графами. Я бы просто написал некоторый код, чтобы справиться с этим, я думаю. - person stephen mallette; 16.02.2017
comment
Правильно.! так что я занимаюсь написанием кода для обслуживания. хорошо, спасибо за все ваши ответы и поддержку. - person MAYUR KUMBHAR; 16.02.2017