如何在Neo4j中找到与关系模式匹配的节点列表?

时间:2014-03-03 02:10:38

标签: neo4j

我必须找到所有节点x1 x2 x3,以便x1-[:R1]->x2-[:R2]->x3

此处R1R2将在此处公布,我们必须找到符合条件的所有此类x1 x2 x3。此外,关系的数量可能增加或减少,即可能有三个关系R1 R2 R3,它应该返回所有x1 x2 {{1}满足条件的x3

我需要使用Java API而不是Cypher查询来执行此操作。

我找到了PatternNode和PatternRelationship类,但发现很难理解以及如何构造它们以实现我想要实现的目标。这两个类都被弃用了。有没有办法通过Java实现这一目标?

1 个答案:

答案 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声明。