2016-07-19 2 views
0

Я использую запрос cypher для кратчайшего пути.cypher shortestpath query с фильтром

   MATCH path = allshortestPaths((a:Place { Name:'Name-1' })-[*] 
       -(b:Place { Name:'Name-2' })) 
       WHERE ANY(x IN nodes(path) WHERE x.Status = "true") 
       RETURN path 

Выше запрос фильтрует пути после получения списка кратчайших путей.

Но мое требование заключается в том, что он должен фильтровать пути внутри с условиями ANY(x IN nodes(path) WHERE x.Status = "true"), то среди фильтрованных путей он должен найти кратчайший путь.

Возможно ли это?

+0

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

+1

На Neo4j 3.0 предикаты ALL и NONE оцениваются во время кратчайшего пути. Но ЛЮБОЙ один не оценивается См. Https://neo4j.com/docs/developer-manual/current/#query-shortestpath-planning – logisima

+0

Спасибо Luanne.we используем версию 3.0.3 – raj

ответ

1

Не имеет значения, сначала вы получаете все кратчайшие пути, а затем фильтруете условие или наоборот. Как указано в комментарии, условие используется для кратчайшего запроса пути.

Ваш запрос может быть медленным, потому что все пути должны быть оценены, чтобы найти кратчайший путь, соответствующий вашему условию (см. Ссылку из комментария).

Если ваш запрос запущен и возвращает что-то, вы все хорошо.

+0

Спасибо за ваш ответ. Но когда Я заменяю ANY ALL/NONE, он будет бесконечным циклом. Какова причина этого. – raj

+0

Возможно, нет пути, соответствующего вашему состоянию. –

+0

Если путь не соответствует, он не должен отображать строки. Исправьте меня, если я ошибаюсь. есть ли другая причина для этого – raj