#python-3.x #gremlin #gremlin-server
#python-3.x #gremlin #gremlin-сервер
Вопрос:
Я пытаюсь выполнить запрос в глубину 4 и ширину 4 к базе данных Neptune, чтобы собрать подграф (чтобы получить все ребра и вершины из этого подграфа), используя gremlin-python. Я хочу сначала начать с данной вершины, развернуть наружу, выбрав 4 верхних взвешенных внешних ребра данной вершины. Затем я снова повторяю тот же процесс для 4 новостных узлов. Я хочу повторить этот процесс внешнего запроса всего 4 раза.
Я пытался использовать следующий код:
g.V('123').repeat(__.outE().order().by("weight",Order.decr).inV().limit(4)).times(4).toList()
Однако мне был возвращен пустой список. Я не могу понять, почему, поскольку я также пытался
g.V('123').repeat(__.out().limit(4)).times(4).toList()
И я смог получить некоторые вершины (но не то, что я хотел, потому что они не являются вершинами из взвешенных сверху ребер).
Есть ли лучший способ для меня запросить этот подграф глубины 4 и ширины 4? Заранее благодарю вас.
Ответ №1:
Если я не упускаю чего-то очевидного, ваш запрос выглядит правильно с точки зрения синтаксиса. Возможно, это ошибка в Neptune? В TinkerGraph я, кажется, получаю один и тот же результат с order()
шагом и без него, используя некоторые образцы данных. Если бы вы могли предоставить пример скрипта, который генерирует некоторые данные, где возникает проблема, и его можно было бы воспроизвести в TinkerGraph, это было бы полезно для решения проблемы.
Единственное, что я могу себе представить, это то, что когда вы order()
возвращаете ребра, они не переходят на глубину 4, поэтому, учитывая способ, которым вы это написали, ничего не выдается. Обратите внимание, что я могу продемонстрировать это следующим образом:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().repeat(outE().order().by('weight').inV()).times(2)
==>v[3]
==>v[5]
gremlin> g.V().repeat(outE().order().by('weight').inV()).times(3)
gremlin>
Возможно, вам нужно emit()
помочь понять, что происходит?
gremlin> g.V().repeat(outE().order().by('weight').inV()).emit().times(3)
==>v[3]
==>v[2]
==>v[4]
==>v[3]
==>v[5]
==>v[3]
==>v[5]
==>v[3]