0

人々 (ノードとして) と KNOWS- および FRIEND_OF- 関係の非常に単純なグラフの例を想定してみましょう。ここで、ランダムな人を知っていて、FRIEND_OF (これまたは) 別の人であるすべてのノードを取得したいと考えています。単純な node.hasRelationship() の代わりにトラバーサルを使用してこれらの関係をチェックしたいと考えてください。

したがって、Evaluator でパスの長さをチェックし、ステップ 1 で KNOWS 関係を選択する TraversalDescription について説明します。発信ノードに戻ります。したがって、入ってくる KNOWS-relation の path.length == 2 をチェックし、現在通過しているノードが path-startnode の ID を持っている場合は continue-variable を true に設定します。

問題: path-startnode (KNOWS-relation をチェックしたノード) に戻ることはありません。エバリュエーターには表示されません。また、さまざまなUNIQUENESSパラメーターを使用しようとしましたが、どれも機能しませんでした。

/編集:これが私のトラバーサルの説明です(多かれ少なかれ疑似コード):

TraversalDescription td = Traversal.description()
    .relationships(RelTypes.KNOWS, Direction.BOTH)
    .relationships(RelTypes.FRIEND_OF, Direction.OUTGOING)
    .uniqueness(Uniqueness.NONE)
    .evaluate(new Evaluator(){
        public Object evaluate(final Path path){
            if (path.length == 0) return EXCLUDE_CONTINUE;
            Relation currentRel = path.lastRelationship();
            boolean continue = false;
            boolean include = false;
            if (path.length == 1){
                // check for outgoing knows-relation
                continue = currentRel.isType(KNOWS) && currentRel.startNode().getId == path.startNode().getId();
            }
            else if (path.length == 2){
                // check for outgoing knows-relation to the original start node
                // SECOND PART OF STATEMENT NEVER GETS TRUE!
                toContinue = currentRel.isType(KNOWS) && currentRel.startNode().getId == path.startNode().getId();
            }
            else if (path.length == 3){
                // ...
            }
            return Evaluation.of(toContinue, include);
        }
4

1 に答える 1

0

試す

private static Traverser getHomies(final Node ofPerson) {
        TraversalDescription td = Traversal.description().breadthFirst().relationships(RelTypes.KNOWS, Direction.INCOMING)
                .relationships(RelTypes.FRIEND_OF, Direction.OUTGOING).evaluator(Evaluators.includingDepths(1, 2))
                .evaluator(Evaluators.returnWhereLastRelationshipTypeIs(RelTypes.FRIEND_OF));

        return td.traverse(ofPerson);
    }

あなたの疑似コード:

  • パスを含める必要がないことを示しています - フィールドincludeは常にfalseです
  • ステートメントの 2 番目の部分は比較ではなく (==)、代入 (=) です。
于 2012-10-30T13:31:45.670 に答える