Я пытаюсь определить причину того, что кажется несоответствием в способе, которым rexster обрабатывает определенные пользователем запросы Gremlin, по сравнению с оболочкой gremlin.
Я использую:
- rexster-server-2.6.0;
- gremlin-groovy-2.5.0;
- orientdb-community-1.7.9;
Я загрузился, чтобы сориентировать граф, представляющий простое дерево иерархии. Каждый узел имеет ребро, помеченное как «родительский», которое указывает на его родителя. Это DAG.
Я определил определяемый пользователем шаг в Gremlin (загружается в rexster через его сценарии инициализации) следующим образом:
Gremlin.defineStep('children',
[Vertex, Pipe],
{int depth -> _().out('parent').loop(1)
{it.loops < depth}
{it.object != null}
})
При использовании инструмента gremlin в командной строке в будке рекстера с этими командами я получаю следующую ошибку (прокрутите вправо, чтобы увидеть все сообщение об ошибке):
gremlin> g.V('type', 'LSNetwork')
==>v[#9:6312]
gremlin> g.V('type', 'LSNetwork').out('parent').out('parent').name
==>Leaf 0
==>Leaf 1
==>Leaf 2
==>Leaf 3
gremlin> g.V('type', 'LSNetwork').children(2)
==>javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: com.tinkerpop.gremlin.groovy.GremlinGroovyPipeline.children() is applicable for argument types: (java.lang.Integer) values: [2]
Однако, если я запускаю gremlin.sh, подключаюсь к своему графику, определяю шаг и выполняю его, он работает отлично:
gremlin> Gremlin.defineStep('children', [Vertex, Pipe], {int depth -> _().out('parent').loop(1){it.loops < depth}{it.object != null}})
==>null
gremlin> sg=new OrientGraph('remote:localhost/scratch')
==>orientgraph[remote:localhost/scratch]
gremlin> sg.V('type','LSNetwork').children(3).name
==>Spine 0
==>Spine 1
==>Leaf 0
==>Leaf 1
==>Leaf 2
==>Leaf 3
(Примечание: имена правильные и то, что я ожидаю увидеть).
Почему мой скрипт gremlin работает с консоли gremlin, а не через bulbs / rexster?
Заранее благодарим за любую помощь, идеи или указатели на соответствующую документацию.