2014-09-10 8 views
1

У меня есть запрос 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); 

ответ

0

Вы можете поставить свой собственный PathEvaluator, который способен обрабатывать состояние ветви. Лучший ресурс по этому поводу - это модульные тесты самого Neo4j, посмотрите https://github.com/neo4j/neo4j/blob/master/community/kernel/src/test/java/org/neo4j/kernel/impl/traversal/TestBranchState.java.

+0

Хм ..? Я должен был бы добавить «totalWeight» в «Path». Из примеров я не могу этого сделать .. Но спасибо за ссылку! – myborobudur

+0

Если это не сработает, вы можете объявить «Карта весов» и заполнить ее в своем пользовательском патваутаторе. При повторении результатов вы можете получить вес заданного пути 'weights.get (path)'. –

 Смежные вопросы

  • Нет связанных вопросов^_^