2014-01-15 4 views
0

Как игнорировать шаблоны совпадений, которые имеют появление одного и того же узла более одного раза, при запросе кратчайшего пути, пример случая в портрете в прикрепленном изображении. enter image description hereNeo4j - Как игнорировать шаблон, который имеет появление одного и того же узла более одного раза

Кратчайший путь от А до С дает,

start a=node:node_auto_index(point='A'),c=node:node_auto_index(point='c') match p=a-[r:CONNECTS*]->c return p; 

1. A-> C 
2. A -> B -> C -> A -> C 
3. A -> B -> C 
4. A -> C -> A -> C 
5. A -> B -> A -> C 
6. A -> C -> B -> A -> B -> C 

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

+0

Какие версия Neo4j вы используете? – jjaderberg

+0

@jjaderberg version 1.9.5 – Jeevanantham

ответ

0

нашел решение для вышеприведенного случая

START a=node:node_auto_index(point='a'), 
c=node:node_auto_index(point='c') 
MATCH path= a-[r:CONNECTS*]->c 
WHERE ALL(n in nodes(path) where 1=length(filter(m in nodes(path) : m=n))) 
RETURN path; 

Теперь его результате только действительные пути, как и ожидалось :-)

1. A -> B -> C 
2. A -> C 
1

Вы не использовали кратчайший путь. Правильный запрос:

start a=node:node_auto_index(point='A'), 
     c=node:node_auto_index(point='c') 
match p=shortestPath((a)-[r:CONNECTS*]->(c)) 
return p; 

Или allShortestPaths

+0

для вышеприведенного случая как 'shortestpath', так и' allshortestpaths' возвращают прямое соединение A -> C, но мне нужно все возможное допустимое соединение, например ** A -> B -> C ** и ** A -> C ** – Jeevanantham

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