2015-10-07 2 views
1

Я не уверен, что это можно сделать любым эффективным способом, но я надеюсь, что это возможно.Neo4J найти кратчайший путь, используя все узлы (неупорядоченный) cypher

Я получаю набор данных с данными на нем, что позволяет мне находить очень конкретные узлы. Однако эти данные не упорядочены каким-либо образом с точки зрения подключения узлов.

То, что я пытаюсь сделать, это найти все узлы в neo4J (до 7), а затем сказать с помощью этих 7 узлов, найти путь, который связывает их все.

Эти узлы будут единственными узлами, подключенными по желаемому пути.

в основном я пытаюсь получить набор, который выглядит как

1,2,3,4,5,6,7

и быть в состоянии найти 2-> 7-> 6-> 3 < < -5 -1-> 4

любая помощь или направление будет значительно оценен

ответ

0

так, как я хотел бы сделать это состоит в следующем:

Вам нужен начальный узел, откуда вы будете запрашивать следующие 7 узлов. Чтобы иметь возможность найти первые 7 узлов, я бы представил начальный корневой узел. Назовем это просто: Root.

MATCH (:Root)-[r:NEXT*1..7]->(x)<-[]-(y) RETURN x, y 

или еще проще:

MATCH (:Root)-[r:NEXT*..7]->(x)<-[]-(y) RETURN x, y 

: Корень конечно может быть любой другой узел в вашем наборе, чтобы получить следующие семь узлов оттуда.

Это то, что вы хотите?

Возьмите еще посмотреть на следующей Neo4j шпаргалку, которая имеет некоторые большие подсказки:

http://assets.neo4j.org/download/Neo4j_CheatSheet_v3.pdf

С уважением

EDIT

Ok извините, я неправильно понял.

Может быть, это приносит вам в дальнейшем:

MATCH (n:Node) where n.refId in [1,2,3,4,5,6,7] 
MATCH (n2:Node) where n2.refId in [1,2,3,4,5,6,7] 
MATCH p=shortestPath((q)-[:NEXT*]-(q2)) 
return collect(distinct p) 

или если эти числа являются узловые идентификаторы, чем как это:

MATCH (n:Node) where id(n) in [1,2,3,4,5,6,7] 
MATCH (n2:Node) where id(n2) in [1,2,3,4,5,6,7] 
MATCH p=shortestPath((q)-[:NEXT*]-(q2)) 
return collect(distinct p) 

Это фактически возвращает все пути между заданными узлами в качестве коллекции. Таким образом, он не возвращает ни одного пути для всех этих узлов. Я не знаю, как это работает функция.

Однако браузер neo4j отображает только один путь между всеми желаемыми узлами из-за его автоматической функции. Поэтому я думаю, что вам нужно будет построить свою собственную логику в коде, если вы хотите связать эти пути с одним.

Может быть, это, по крайней мере, отправной точкой для задачи

+0

как это найти путь, который соединяет все узлы, данные и только те узлы, данные? У меня иногда 70 отношений, идущих к одному узлу и из него –

+0

Извините, моя ошибка. Посмотрите на мое редактирование. Надеюсь, это поможет... – n3bul4

Смежные вопросы