Это не добавляет ребра с правильными входными и выходными вершинами - PullRequest
0 голосов
/ 24 мая 2018

Я хотел бы добавить новое ребро между двумя вершинами.

Вот команда, которую я использую

def graph=ConfiguredGraphFactory.open('graph');
def g = graph.traversal();

graph.addVertex(label, 'Person', 'name', 'Jack', 'entityId', '100');
graph.addVertex(label, 'Person', 'name', 'John', 'entityId', '50');

def v1 = g.V().has('entityId', '100').next();
def v2 = g.V().has('entityId', '50').next();
v1.addEdge('managerOf',v2,'inEntityId', '100', 'outEntityId', '50')

Тогда всякий раз, когда я хочу получить путь, который я только что создал:

g.V().outE().inV().path();

Возвращает:

[
  {
    "labels": [
      [],
      [],
      []
    ],
    "objects": [
      {
        "id": 40968272,
        "label": "Person",
        "type": "vertex",
        "properties": {
          "name": [
            {
              "id": "oe22y-oe3bk-6mmd",
              "value": "Jack"
            }
          ],
          "entityId": [
            {
              "id": "oe2h6-oe3bk-6ozp",
              "value": "100"
            }
          ]
        }
      },
      {
        "id": "1crua2-oe3bk-4is5-oectk",
        "label": "managerOf",
        "type": "edge",
        "inVLabel": "Person",
        "outVLabel": "Person",
        "inV": 40980584,
        "outV": 40968272,
        "properties": {
          "outEntityId": "50",
          "inEntityId": "100"
        }
      },
      {
        "id": 40980584,
        "label": "Person",
        "type": "vertex",
        "properties": {
          "name": [
            {
              "id": "1cs5ql-oectk-6mmd",
              "value": "John"
            }
          ],
          "entityId": [
            {
              "id": "1cs64t-oectk-6ozp",
              "value": "50"
            }
          ]
        }
      }
    ]
  }
]

Обратите внимание, что край не отражает то, что я только что создал.Это перевернуто!Как это возможно?Я что-то не так делаю?

Я использую JanusGraph, в браузере данных он также отображает ребро в неправильном направлении.

1 Ответ

0 голосов
/ 24 мая 2018

Я думаю, что это правильно.Вы изменили свои свойства, хотя на вашем краю."outEntityId" должен быть "100" (Джек), а "inEntityId" должен быть "50" (Джон), так же как край равен inV и outV отражает.Другими словами, вы создали

jack-managerOf->john

для этого края "managerOf", край выходит из "гнезда", таким образом, outV это "гнездо" и переходит в "джон",таким образом, inV - это "Джон".

Обратите внимание, что вы можете упростить добавление вершин / ребер, следуя рекомендованному маршруту использования Traversal API (он же Gremlin):

gremlin> g.addV('Person').property('name', 'Jack').property('entityId', '100').as('jack').
......1>   addV('Person').property('name', 'John').property('entityId', '50').as('john').
......2>   addE('managerOf').from('jack').to('john').property('inEntityId', '50').property('outEntityId', '100').iterate()
gremlin> g.V().outE().inV().path().by('name').by(valueMap())
==>[Jack,[inEntityId:50,outEntityId:100],John]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...