Ich greife auf die neo4j-Datenbank über GraphDatabaseService. Ich habe einige Knoten und Beziehungen hinzugefügt und möchte eine Abfrage durchführen. Mein Ziel ist es, alle Knoten zu bekommen, die eine Calling-Beziehung zum Endknoten haben. Also habe ich die ganzen Wege zu diesem Knoten. (ZB: node1 -calling-> Knoten2 auffordern * -> nodeX -calling-> Endknoten)Abfrage auf neo4j-Datenbank von Java ausführen, Analyse des Ergebnisses
habe ich versucht, so etwas wie dieses:
GraphDatabaseService _graphDatabase; // db is running and working fine
Node node;//given by the function call
HashMap<String, Object> properties = Maps.newHashMap();
properties.put("name", getPropertyFromNode(node, "name"));
String query = "MATCH p=(startnode)-[rel:CALLING*]->(endnode) WHERE endnode.name = {name} RETURN p";
Result result = _graphDatabase.execute(query, properties);
while (result.hasNext()) {
Map<String, Object> next = result.next();
next.forEach((k, v) -> {
System.out.println(k + " : " + v.toString());
if (v instanceof PathImpl) {
PathImpl pathImpl = (PathImpl) v;
String startNodeName = getPropertyFromNode(pathImpl.startNode(), "name");
String endNodeName = getPropertyFromNode(pathImpl.endNode(), "name");
System.out.println(startNodeName + " -calling-> " + endNodeName);
}
});
}
public String getPropertyFromNode(Node node, String propertyName) {
String result = null;
try (Transaction transaction = _graphDatabase.beginTx()) {
result =node.getProperty(propertyName).toString();
transaction.success();
}
return result;
}
Problem für mich ist, dass das Ergebnis eine Karte ist < 'String, Object> und ich möchte die IDs oder Namen der Knoten, die in der Beziehung sind. Ich habe versucht, das Objekt zu PathImpl zu werfen, weil das der Typ ist, der zurückgegeben wird (durch Debug ermittelt), aber es scheint, dass diese Klasse in einem anderen Klassenlader ist, so dass die Anweisung instanceof false zurückgibt. v.toString() gibt eine String-Repräsentation der gelinkten Knoten mit IDs zurück (zB: p: (24929) - [CALLING, 108061] -> (24930))
Meine Frage ist, kann ich darauf zugreifen Informationen in einer besseren Weise oder wie kann ich den ClassLoader ändern (wenn das das Problem ist, arbeite ich mit Eclipse in einem Großprojekt) um diese Besetzung passiert zu machen. Ich will nicht die Zeichenfolge analysieren, um die IDs zu bekommen und die Knoten aus der db über diese Eigenschaft, seine Nähte hässlich für mich.
sieht aus wie ich zu tief in die Lösung dieses Problems mit Java anstatt zweimal über die Abfrage cipher, thx – Stefan
Problem auf diese Weise ist im verlieren die Informationen über die Beziehung zwischen den Knoten ... so habe ich eine Liste von allen Knoten ja, aber ich weiß nicht wie der Pfad aussieht – Stefan
Um auch den Pfad zu bekommen, muss man einfach den Pfad 'p' in die' RETURN' Klausel einfügen. Ich habe meine Antwort aktualisiert. – cybersam