2013-06-12 2 views
0

с использованием Neo4j. Я работаю над очень простой моделью, состоящей из пяти узлов A..E и восьми отношений между ними. Для данного начального узла я хочу получить все пути, которые касаются каждого отношения модели. Каждое отношение нужно трогать один раз.Neo4j: Из заданного начального узла найдите все пути, которые касаются всех отношений

Мой код выглядит следующим образом:

TraversalDescription traversal = Traversal.description().uniqueness(Uniqueness.RELATIONSHIP_GLOBAL); 

Traverser t = traversal.traverse(getNode("C")); 
for (Path position : t) 
{ 
    if(position.length() == 8) { 
     System.out.println("Solution found"); 
    } 
} 

Моя проблема в том, что транспортер не возвращает все возможные пути длиной восемь, но только один.

Есть ли способ сказать Traverser или TraversalDescription выбросить все пути?

Спасибо, Олли

+1

@Illimaus, почему бы вам не попробовать 'Uniqueness.RELATIONSHIP_PATH' или даже' Uniqueness.NONE'? – tstorms

+0

Hi tstorms, Uniqueness.RELATIONSHIP_PATH заставил работать :) Я также работаю над предложением Evalutor, но не могу заставить его работать прямо сейчас, нужно изучить его ... С уважением, Olli – Ollimaus

ответ

0

Вы пробовали использованияКонтактную Cypher запросов для этого? это может быть что-то вроде

start n = node:someIndex(name='C') match p=n-[RELATION*8]->(x) return x, length(p) 

Вы также можете попробовать использовать Evaluators, это может помочь вам найти пути с определенной глубины.

Evaluation evaluate(Path path) { 
return path.length() == 8 ? Evaluation.INCLUDE_AND_PRUNE : Evaluation.EXCLUDE_AND_CONTINUE); 
} 

Я хочу это помочь вам ..