我必须找到所有节点x1
x2
x3
,以便x1-[:R1]->x2-[:R2]->x3
。
此处R1
和R2
将在此处公布,我们必须找到符合条件的所有此类x1
x2
x3
。此外,关系的数量可能增加或减少,即可能有三个关系R1
R2
R3
,它应该返回所有x1
x2
{{1}满足条件的x3
。
我需要使用Java API而不是Cypher查询来执行此操作。
我找到了PatternNode和PatternRelationship类,但发现很难理解以及如何构造它们以实现我想要实现的目标。这两个类都被弃用了。有没有办法通过Java实现这一目标?
答案 0 :(得分:1)
您可以通过多种方式遍历java中的图形。这些是你的选择:
执行Cypher查询
使用ExecutionEngine执行Cypher查询:
final ExecutionEngine engine = new ExecutionEngine(graphDB);
ExecutionResult result = engine.execute("YOUR_CYPHER_QUERY");
使用Cypher DSL语法
同样,你基本上是在写一个Cypher查询,但这一次,你使用了一个不错的DSL语句。查看https://github.com/neo4j/cypher-dsl。
Execute q = start(node("john", john)).
match(path().from("john").out("friend").link().out("friend").to("fof")).
returns(properties("john.name", "fof.name"));
ExecutionResult result = engine.execute( q.toString() ).toString();
使用遍历API
您可以控制完整的图遍历。一个例子:
for (final Path position : Traversal.description().depthFirst()
.relationships(RelationType.RELATIONSHIP_TYPE, Direction.INCOMING).traverse(node)) {
System.out.println(position.endNode();
}
这取决于你,但我更喜欢简单的Cypher声明。