我如何表现
MATCH (p:Person:Actor)-[r:ACTED_IN]->(m:Movies{name:"ABC"}) RETURN p.name;
在 neo4j 嵌入式 Java 中。代码的详细解释将有很大帮助。 注意:我想在本机 Java api 中而不是在密码中执行此操作。它应该有大约 100000 个节点
我如何表现
MATCH (p:Person:Actor)-[r:ACTED_IN]->(m:Movies{name:"ABC"}) RETURN p.name;
在 neo4j 嵌入式 Java 中。代码的详细解释将有很大帮助。 注意:我想在本机 Java api 中而不是在密码中执行此操作。它应该有大约 100000 个节点
您可以使用以下命令执行 Cypher 查询:
GraphDatabaseService db = ...;
// from version 2.2.x onwards
db.execute("your cypher statement");
// before version 2.2.x
ExecutionEngine engine = new ExecutionEngine(db)
engine.execute("your cypher statement");
如果您在 v2.2 之前使用 Neo4j,请注意这ExecutionEngine
意味着要实例化为单例,以便正确缓存执行计划。
如果您有很强的性能限制,可能想要使用TraversalDescription
和自定义许多可用参数,并在需要时定义遍历回调。关键是确保您遍历所需的尽可能少的节点。
您应该知道,尽管 Cypher 执行的性能越来越好,但最新版本 (2.2) 带来了很多改进。
你可以尝试这样的事情:
Label person = DynamicLabel.label("Person");
for(Node p : GlobalGraphOperations.at(gdb).getAllNodesWithLabel(person))
{
RelationshipType actedIn = DynamicRelationshipType.withName("ACTED_IN");
if(p.hasRelationship(actedIn, Direction.OUTGOING))
{
Node m = p.getSingleRelationship(actedIn, Direction.OUTGOING).getEndNode();
Label person = DynamicLabel.label("Movies");
if(m.hasLabel(movies) && m.getProperty("name", null) == "ABC")
{
return p.getProperty("name");
}
}
}