Как получить путь со связями из звонка randomWalk в Cypher? - PullRequest
0 голосов
/ 15 мая 2019

Я использую алгоритм Neo4j randomWalk на основе двух типов узлов (N1 и N2) и одного типа отношений (R1). Алгоритм случайного блуждания возвращает список NodeId. Проблема здесь в том, что я хотел бы получить отношения R1 между узлами каждого пути.

Я пробовал следующий запрос:

    MATCH (n:N1) WHERE ID(n) = 38
    CALL algo.randomWalk.stream(ID(n), 4, 4)
    YIELD nodeIds
    UNWIND nodeIds as nodeId
    OPTIONAL MATCH (l:N1)-[r:R1]-(q:N2)
    WHERE (ID(l) = nodeId) AND (ID(q) in nodeIds)
    RETURN l,q, nodeIds, nodeId,ID(q), ID(l)

Однако это не очень хорошее решение, поскольку оно показывает все взаимосвязи между узлом l и узлом q, которые присутствуют в ID узла. Следовательно, я не понимаю путь. Вы знаете, как я мог решить эту проблему?

Спасибо за ваше время, Syndorik

1 Ответ

0 голосов
/ 15 мая 2019

После некоторых исследований я нашел способ получить n-й элемент и n-й + 1 элемент в одном и том же цикле UNWIND.

Вот что я сделал:

MATCH (n:Clips) WHERE ID(n) = 39
CALL algo.randomWalk.stream(ID(n),4,1)
YIELD nodeIds
UNWIND RANGE(0,size(nodeIds)-1) as idx
MATCH (l)-[r:R1]-(q)
WHERE ID(l) = nodeIds[idx] and ID(q) = nodeIds[idx+1]
RETURN ID(l), ID(q),nodeIds

С помощью этогоЯ успешно извлек путь с отношениями и узлами.Не стесняйтесь, если у вас есть вопросы о том, как это работает.Изображение ниже - вот что я получаю.

The Result I'm getting

...