1

私の 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マップされたオブジェクトの代わりに ofArrayListが含まれています。LinkedHashMap

パス要素のラベルと、関係の開始ノードと終了ノードを特定することさえできません。

私は何を間違っていますか?

4

2 に答える 2

1

現在の neo4j-ogm リリースは、クエリ結果をドメイン エンティティにマップしません。パスを返すと、そのパス内のノードと関係のプロパティのみが提供されます (順番に、関係の開始/終了を推測できます)。ID は、この特定の操作のために OGM によって現在使用されている Neo4j REST API によって返されないため、欠落しています。代わりに、ID を抽出してクエリの一部として返す必要がある場合があります。

個々のクエリ結果列のエンティティへのマッピングは、Neo4j-OGM 2.0 リリースで利用できるようになります。

于 2016-01-01T05:03:49.530 に答える
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
于 2015-12-29T14:34:06.083 に答える