Выполнение поиска глубины 4 и ширины 4 с использованием gremlin python - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь выполнить запрос глубины 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 Ответ

0 голосов
/ 30 марта 2019

Если я не пропустил что-то очевидное, ваш запрос выглядит правильно с точки зрения синтаксиса. Возможно, это ошибка в Нептуне? В 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]
...