gremlin python подграф всегда пуст - PullRequest
0 голосов
/ 18 июня 2020

Я использую gremlin python для подключения к серверу gremlin следующим образом:

g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin', 'g'))

Но когда я работаю с подграфом (здесь упоминается http://tinkerpop.apache.org/docs/current/reference/#subgraph -step ):

g.V().has(*vertex).repeat(__.inE().subgraph('subGraph').outV()).times(1).cap('subGraph').toList()

Результат всегда пустой, вот так: [{}]

Где я ошибаюсь? Как получить подграф с помощью gremlin- ​​python?

1 Ответ

1 голос
/ 19 июня 2020

Шаги tree() и subgraph() пока не поддерживаются в вариантах языка Gremlin (GLV) ( TINKERPOP-2063 ). Основная проблема заключается в том, что GLV не являются полной реализацией виртуальной машины Gremlin и, следовательно, не имеют экземпляра Graph для десериализации подграфа.

Чтобы обойти это ограничение, вам нужно будет захватить подграф в качестве побочного эффекта для сбора его данных. Например, вы можете использовать store() для этой цели, как показано в следующем примере, где я беру подграф «знает»:

gremlin> g.V().hasLabel('person').store('v').by(elementMap()).
......1>   outE('knows').store('e').by(elementMap()).
......2>   inV().store('v').by(elementMap()).
......3>   cap('v').dedup().
......4>   project('vertices','edges').
......5>     by().
......6>     by(cap('e')).next()
==>vertices={{id=1, label=person, myid=1, name=marko, age=29}=1, {id=2, label=person, myid=2, name=vadas, age=27}=2, {id=4, label=person, myid=4, name=josh, age=32}=2, {id=6, label=person, myid=6, name=peter, age=35}=1}
==>edges={{id=7, label=knows, IN={id=2, label=person}, OUT={id=1, label=person}, weight=0.5}=1, {id=8, label=knows, IN={id=4, label=person}, OUT={id=1, label=person}, weight=1.0}=1}

Если есть какая-то причина, по которой вы обязательно должны использовать subgraph(), тогда единственный другой вариант - отправить скрипт Gremlin (а ​​не байт-код). Сценарий сначала выполнит обход с subgraph(), как в вашем примере, но затем в том же сценарии запишет подграф в строку GraphSON (или что-то подобное). Python тогда получит строковое представление графика. Конечно, тогда вам придется каким-то образом обработать этот формат на стороне клиента.

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