Я пытаюсь найти кратчайший путь между двумя узлами, и я хотел бы получить отношения (начальный узел, конечный узел и тип), чтобы я мог генерировать подграф в Java.
Я использую этоcypher:
MATCH (nodeA),(nodeB), p = shortestPath((nodeA)-[*..15]-(nodeB))
WHERE ID(nodeA) = 1332076 AND ID(nodeB) = 1459451
UNWIND nodes(p) as n
UNWIND relationships(p) as r
RETURN collect(distinct { id : id(n), labels : labels(n), data: n}) as nodes, collect(distinct r) as relationships
Моя проблема в том, что отношения возвращаются в формате, который я не понимаю.Примерно так:
{
"TFFamily": "MADS",
"Category": "DIRECT",
"PubMedID": "UNKNOWN",
"Reference": "NA",
"Interaction": "UNCONFIRMED",
"TargetType": "AT2G36590",
"Confirmation": "NO",
"isTF": "AT2G36590"
}
{
"HIT_END": "104",
"BLAST_alignement_length": "52",
"BLAST_evalue": "4.00E-27",
"HIT_START": "53",
"BLAST_percentage_identity": "82.69",
"percentage_match": "43.7",
"QUERY_START": "58",
"clusterid": "CLUSTER_5713",
"QUERY_END": "109",
"BLAST_mismatches": "9",
"BLAST_nrofgaps": "0"}
что такое отношение (р)?Есть ли способ получить startId, endId и тип?
Спасибо
РЕДАКТИРОВАТЬ:
Возможное решение:
Не уверен, если этолучший вариант, но я нашел там startNode (r) и endNode (r)
" MATCH (nodeA),(nodeB), p = shortestPath((nodeA)-[%s*..%s]-(nodeB))" + //
" WHERE ID(nodeA) = {1} AND ID(nodeB) = {2} " + //
" UNWIND nodes(p) as n" + //
" UNWIND relationships(p) as r" + //
" RETURN COLLECT(distinct { id : id(n), labels : labels(n), data: n}) as nodes, " + //
" COLLECT(distinct { relationshipId : ID(r), startId : ID(startNode(r)), labels : type(r) , endId: ID(endNode(r))}) as edges"; //