У меня есть запрос cypher, и я пытаюсь написать эквивалентное описание обхода, но я застрял в заказе.Описание traversal эквивалентно запросу cypher
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);
Могу ли я также две последние строки шифровальщика запроса (уменьшить заказ) в описании обхода? Я мог бы сделать это потом сам в петлю ..
Traverser traverser = td.traverse(start);
List<PathWrapper> orderedTraversalResult = new ArrayList<>();
for (Path path : traverser) {
orderedTraversalResult.add(new PathWrapper(path));
}
Collections.sort(orderedTraversalResult);
Хм ..? Я должен был бы добавить «totalWeight» в «Path». Из примеров я не могу этого сделать .. Но спасибо за ссылку! – myborobudur
Если это не сработает, вы можете объявить «Карта весов» и заполнить ее в своем пользовательском патваутаторе. При повторении результатов вы можете получить вес заданного пути 'weights.get (path)'. –