Neo4j-ogm查询路径

时间:2015-12-29 14:07:13

标签: java neo4j neo4j-ogm

在我的Java代码中,我有一个查询来匹配从树到树中叶子的最短路径。

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个而非映射对象。

我甚至无法确定路径元素的标签以及关系的起点和终点节点。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

当前的neo4j-ogm版本不会将查询结果映射到域实体。返回路径只会为您提供该路径中节点和关系的属性(按顺序,您可以推断出关系的开始/结束)。目前OGM用于此特定操作的Neo4j REST api不返回ID,这就是它们丢失的原因。您可能需要提取ID并将其作为查询的一部分返回。

将Neo4j-OGM 2.0版本中的各个查询结果列映射到实体。

答案 1 :(得分: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