Если вы хотите только самый длинный путь, то вы можете сделать:
MATCH path=(N1:Node)-[REL*..2]->(N2:Node)
WHERE N2.RIC =~"some ticker.*"
RETURN p
ORDER BY length(p) DESC
LIMIT 1
Что касается получения направления, это зависит от водителя, который вы используете. В конечной точке транзакции HTTP Neo4j, если вы укажете REST
для resultDataContents
, он вернет directions
для любых возвращаемых объектов пути. Вот как вы установили, что:
http://neo4j.com/docs/stable/rest-api-transactional.html#rest-api-execute-statements-in-an-open-transaction-in-rest-format-for-the-return
Вот пример того, как это выглядит:
"rest": [
{
"relationships": [
"http://localhost:7474/db/data/relationship/587"
],
"nodes": [
"http://localhost:7474/db/data/node/1002",
"http://localhost:7474/db/data/node/1001"
],
"directions": [
"<-"
],
"length": 1,
"start": "http://localhost:7474/db/data/node/1002",
"end": "http://localhost:7474/db/data/node/1001"
}
]
EDIT:
В ответ на ваш комментарий, чтобы получить самый длинный путь для каждого родителя:
MATCH path=(N1:Node)-[REL*..2]->(N2:Node)
WHERE N2.RIC =~"some ticker.*"
WITH N1, N2, collect(p) AS paths
ORDER BY length(p) DESC
RETURN N1, N2, paths[0] AS longest_path
Я не был уверен, какая сторона должна быть родительской, поэтому я вернул оба N1
и N2
, которые должны дать вам самый длинный путь для каждой комбинации этих двух. Вы можете удалить один из них, чтобы получить самый длинный путь, ведущий к/из оставшегося узла.
спасибо. я не хочу самого длинного пути, я хочу самый длинный путь различных вариантов. A-> B-> C -> родительский D-> E-> родительский –
Мой шифр: 'MATCH path = (n) - [: REL *] -> (m), где id (n) = return path'. Мне нужны все неперекрывающиеся пути. Он возвратил пути: 'a-> b',' a-> b-> c', 'a-> b-> d',' a-> c', 'a-> c-> e'. Я не хочу 'a-> b' и' a-> c' в выходе, поскольку они являются частью/подмножеством других возвращенных путей. Как мне это сделать? Это можно сделать в cypher? –
Mahesha999
Возможно, вы можете это сделать, но было бы слишком сложно ответить в комментарии, и вы вряд ли привлечете много людей, чтобы придумать ответ, если не задать вопрос из этого –