2016-12-30 4 views
0

Ich benutze Neo4j Traversal Framework (Java). Ich brauche benutzerdefinierte evalutor zu schaffen Knoten umfassen, in denen eine bestimmte Bedingung wahr istNeo4j Traversal Beschreibung - Custom Evaluator

mein Code:

@Override 
     public Evaluation evaluate(Path path) { 
      log.info("Node Id: " + path.endNode().getProperty("DIST_ID")); 
      long mCount = 0; 
      if ((Long) path.endNode().getProperty("RANK") >= 3) { 
       mCount++; 
      } 
      log.info("mCount " + mCount); 
      return Evaluation.INCLUDE_AND_CONTINUE; 
     } 
    }; 

    TraversalDescription traversalDescription = db.traversalDescription(); 
    Traverser traverser = traversalDescription.breadthFirst() 
      .relationships(RelationshipTypes.SPONSOR, Direction.OUTGOING).evaluator(e).traverse(DSTS); 

DSTS ist eingehenden Knoten. es bedeutet Top-Knoten.Ich möchte downline-Knoten mit rank.If Beispiel Ich brauche zwei Ebenen, so dass ich zwei Ebenen durch Verwendung von rank.Rank teilen möchte ist eine der Eigenschaft von node.if Rang ist 5 Ich möchte diese Knoten sammeln und es abgehende Knoten bis Rang 5.

erhalten Sollten Möglichkeiten bitte leite mich ...

Antwort

1

Sie im Zweig Zustand aussehen könnte, also verwenden Sie die evaluate Methode, die auch ein BranchState Argument. Sie können dies verwenden, um den Status für jeden besuchten Traversierungszweig beizubehalten und ihn beim Abfahren von Traversierungszweigen zu erweitern. Z.B.

new PathEvaluator<Long> {   
    public Evaluation evaluate(Path path, BranchState<Long> state) { 
     log.info("Node Id: " + path.endNode().getProperty("DIST_ID")); 
     long mCount = state.getState(); 
     if ((Long) path.endNode().getProperty("RANK") >= 3) { 
      mCount++; 
      state.setState(mCount); 
     } 
     if (mCount >= 5) { 
      // do something 
     } 
     log.info("mCount " + mCount); 
     return Evaluation.INCLUDE_AND_CONTINUE; 
    } 
} 

Dies entspricht der Addition der Reihen aus der ganzen Weg nach oben auf jeder beurteilen, aber die BranchState macht dies mehr performant.

Ist das etwas, woran Sie gedacht haben?

+0

Danke Mattias Persson. – nmkkannan