2015-12-29 2 views
1

В моем коде Java у меня есть запрос, чтобы соответствовать кратчайшему пути от корня до листа в моем дереве.Neo4j-ogm query path

Strinq query = "Match path = (p:Root)-[*1..100]-(m:Leaf) " 
    + "WITH p,m,path ORDER BY length(path) LIMIT 1 RETURN path"; 

Однако, когда я пытаюсь запросить это следующим образом

SessionFactory sessionFactory = new SessionFactory("incyan.Data.Neo4j.Models"); 
Session session = sessionFactory.openSession("http://localhost:7474"); 
Object o = session(query, new HashMap<String,Object>()); 

o содержит ArrayList из LinkedHashMap с вместо отображаемых объектов.

Я даже не могу определить метки элементов пути и начального и конечного узлов отношений.

Что я делаю неправильно?

ответ

1

Током Neo4j-ОГМОМ-релиз не отображает результаты запроса к объектам домена. Возврат пути даст вам только свойства узлов и связей в этом пути (в порядке, чтобы вы могли определить начало/конец отношений). Идентификаторы не возвращаются Apo Neo4j REST, которые в настоящее время используются OGM для этой конкретной операции, и поэтому они отсутствуют. Вы можете вместо этого извлечь идентификаторы и вернуть их как часть вашего запроса.

Отображение отдельных столбцов результатов запроса для сущностей будет доступно в версии Neo4j-OGM 2.0.

0

Я не уверен, что бит Java, но если вы используете shortestPath функцию Ваш запрос должен быть более эффективным (ключевое слово):

MATCH path=shortestPath((p:Root)-[*1..100]-(m:Leaf)) 
RETURN path 

Кроме того, я не знаю, что ваша модель данных как будто, но я бы ожидал, что метки на узлах вашего дерева (я предполагаю, что это дерево) все будет одинаковым. Вы можете сказать, если узел является корень или лист с использованием Cypher:

MATCH path=shortestPath((root:Element)-[*1..100]-(leaf:Element)) 
WHERE NOT((root)-[:HAS_PARENT]->()) AND NOT(()-[:HAS_PARENT]->(leaf)) 
RETURN path 
+0

>> но если вы используете функцию shortestPath ... Thanx много. Изменит мой запрос. >>> Я не знаю, как выглядит ваша модель данных, но я бы ожидал ярлыки на узлах вашего дерева ... Nope. В моем дереве есть один корневой элемент, отмеченный меткой «Root». Все остальные узлы имеют метки либо «Лист», либо «BranchBase». Если я выполняю запрос в web-интерфейсе neo4j, он вернет правильный путь. Моя проблема связана с библиотекой neo4j-ogm java. Он не отображает возвращенные объекты в мои объекты Java, определенные как описано здесь: http://neo4j.com/docs/ogm/java/stable/ – Vahagn

+0

Вместо этого session.query() возвращает 'ArrayList'' LinkedHashMap' s. – Vahagn

+0

Ах, справедливо. Я позволю кому-то еще ответить на вопрос Java OGM;) Кроме того, если вы не знаете, узлы в Neo4j могут иметь несколько ярлыков, поэтому, если вы хотите пометить некоторые узлы как 'Root' /' Leaf', вы можете также есть еще один ярлык, который охватывает все их для различной ситуации запросов. –

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