1

私はサイファークエリを持っていて、同等のトラバーサル記述を書こうとしていますが、順番に行き詰まっています。

start n=node:EduNodes(title='bachelor of science')     
match p=n-[:JOB_CHANGE|EDUCATION|CAREER_ENTRY|EDUCATION_CONTINUED*1..4]->m     
with p, relationships(p) as rels, n, m     
return p,n,m,     
reduce(weight=0, x in rels: weight + x.weight) as totalWeight     
order by totalWeight asc    

このクエリは非常にメモリを消費し、低速です。トラバーサルの記述は高速です。

TraversalDescription td = Traversal.traversal().evaluator(Evaluators.excludeStartPosition())
        .uniqueness(Uniqueness.NONE).depthFirst()
        .evaluator(Evaluators.includingDepths(1, 4))
        .relationships(RelationshipTypes.JOB_CHANGE, Direction.OUTGOING)
        .relationships(RelationshipTypes.EDUCATION, Direction.OUTGOING)
        .relationships(RelationshipTypes.CAREER_ENTRY, Direction.OUTGOING)
        .relationships(RelationshipTypes.EDUCATION_CONTINUED, Direction.OUTGOING);

トラバーサルの説明に、サイファー クエリ (順序を減らす) の最後の 2 行を含めることはできますか? その後、ループで自分でそれを行うことができました..

Traverser traverser = td.traverse(start);
List<PathWrapper> orderedTraversalResult = new ArrayList<>();
for (Path path : traverser) {
    orderedTraversalResult.add(new PathWrapper(path));
}
Collections.sort(orderedTraversalResult);
4

1 に答える 1

0

PathEvaluator分岐状態を処理できる独自のものを提供できます。これに関する最良のリソースは、 Neo4j自体の単体テストです。 /TestBranchState.java .

于 2014-09-10T15:22:04.853 に答える