人々 (ノードとして) と 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);
}