Найти все пути между двумя узлами - PullRequest
1 голос
/ 25 сентября 2011

Используя скрипт gremlin и neo4j, я пытаюсь найти все пути между двумя узлами, опускаясь максимум на 10 уровней вниз.Но все, что я получаю в ответ от REST API - это

java.lang.ArrayIndexOutOfBoundsException: -1

Вот сценарий:

x = g.v(2) 
y = g.v(6) 

x.both.loop(10){!it.object.equals(y)}.paths

Я просмотрел документацию, но не смог найти ничего подходящего для этого варианта использования.

1 Ответ

1 голос
/ 26 сентября 2011

В Gremlin аргумент loop - это количество шагов назад, которое вы хотите сделать, и вычисляется замыкание, чтобы определить, когда выйти из цикла. В этом случае, поскольку у вас есть loop(10), он слишком далеко вернется к точке, где конвейер не определен. Что касается замыкания, вам нужно проверить не только, является ли объект объектом, о котором идет речь, и в этом случае вам следует остановиться, но также проверить, сделали ли вы уже 10 циклов.

То, что вы действительно хотите, это примерно так:

x.both.loop(1){!it.object.equals(y) && it.loops < 10}.paths

Однако я должен добавить, что если на графике есть цикл, он с удовольствием будет пересекать цикл снова и снова и приводить к слишком большому количеству путей. Вы можете применить некоторые умные filter и sideEffect, чтобы избежать многократного посещения узлов.

Для получения дополнительной информации см. Страницу Loop Pattern на Gremlin Wiki .

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