2015-05-24 3 views
0

Как выполнитьСложные запросы в Neo4j встроенных Java

MATCH (p:Person:Actor)-[r:ACTED_IN]->(m:Movies{name:"ABC"}) RETURN p.name; 

В Neo4j встроенной Java. подробное объяснение кода было бы очень полезным. примечание: Я хочу сделать это в родной Java api не в cypher. Предполагается иметь около 100000 узлов

ответ

1

Вы можете выполнять запросы 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"); 

Если вы используете Neo4j перед тем v2.2, обратите внимание, что ExecutionEngine призван быть реализован как синглтон, так что планы выполнения будут правильно кэшированы.

Если у вас есть сильные ограничения производительности, возможно, вы захотите сыграть с TraversalDescription и настройте множество доступных параметров и, если необходимо, определите обратный вызов обхода. Ключ должен обеспечить, чтобы вы проходили как можно меньше узлов.

Вы должны знать, что исполнение Cypher становится все более и более эффективным, последняя версия (2.2) приносит много улучшений.

+0

Но это будет медленным, чем прямой код Java не так ли? –

+0

Ну, здесь не сложно. 2.2 дает множество улучшений в отношении оптимизации Cypher. – Rolf

+0

Отредактировал свой первоначальный ответ, чтобы предоставить вам альтернативу, также известную как TraversalDescription. – Rolf

0

Вы можете попробовать что-то вроде этого:

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"); 
     } 
    } 
} 
Смежные вопросы