2016-12-30 4 views
0

私はNeo4j Traversal Framework(Java)を使用しています。私はいくつかの条件がNeo4jトラバーサル説明 - カスタムエバリュエーター

マイコード本当であるノードを含めるようにカスタムevalutorを作成する必要が は次のとおりです。

@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は、着信ノードです。それはトップノードを意味します。私はランクを使用してダウンラインノードを分割したいと思います。私は2つのレベルを必要とするので、私はrank.rankを使用して2つのレベルを分割したいのでnode.ifランクのプロパティの一つです5私はこのノードを収集したいいずれかの可能性が私を導いてください場合は、発信ノードまで、あなたはまた、BranchState引数を取るevaluateメソッドを使用する、すなわち、分岐状態で見ることができる...

答えて

1

をランク5

を取得します。これを使用して、訪問された各トラバーサルブランチの状態を保持し、トラバーサルブランチを下ろすときにその状態を維持することができます。例えば。

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; 
    } 
} 

これは、すべてが評価にパス全体からのランクを合計するのと同じですが、BranchStateが、これはよりパフォーマンスになります。

これはあなたが考えていたものですか?

+0

Mattias Perssonに感謝します。 – nmkkannan