2016-06-25 5 views
0

Я изо всех сил пытаюсь найти пути для поиска всех путей (до максимальной длины) между двумя узлами, контролируя исследование пути Neo4j, сортируя отношения, которые будут (по одному из их свойств).Neo4j Cypher найти все пути, изучающие отсортированные отношения

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

match (source{name:"source"}), (target{name:"target"}), 
p = (source)-[*..M]->(target) 
return p order by length(p) limit K; 

До сих пор так хорошо. Но скажем, что отношения пути имеют свойство, называемое «приоритетом». Я хочу написать запрос, который сообщает Neo4j на каждом этапе исследования пути, какие отношения следует изучать в первую очередь.

Я знаю, что это возможно, когда я использую библиотеки java и встроенную базу данных (путем реализации интерфейса PathExpander и предоставления его в качестве функции функции GraphAlgoFactory.allSimplePaths() в Java). Но теперь я пытаюсь найти способ сделать это в доступе к базе данных в режиме сервера с помощью Bolt или REST api.

Есть ли способ сделать это в режиме сервера? Или, может быть, использовать функции библиотек Java при доступе к графику в режиме сервера?

+0

насчет 'APOC'? https://github.com/neo4j-contrib/neo4j-apoc-procedures#graph-algorithms-work-in-progress –

+0

Я проверил его, он не делает то, что я хочу, но спасибо в любом случае! –

ответ

1
  1. использовать метки и индекс, чтобы найти ваши два запуска-узлы
  2. возможно рассмотреть allShortestPaths, чтобы сделать это быстрее

попробовать это:

match (source{name:"source"}), (target{name:"target"}), 
p = (source)-[rels:*..20]->(target) 
return p, reduce(prio=0, r IN rels | prio + r.priority) as priority 
order by priority ASC, length(p) 
limit 100; 
+0

Я боюсь, что не делает именно то, что я хочу. Фактически, сортируя отношения, я хочу направить обход к цели и тем самым улучшить производительность. Это не то, что делает этот запрос. На самом деле я хочу найти лучшие K-пути (не обязательно кратчайшие пути) на большом графике с хорошей производительностью, но когда я запускаю запросы, подобные написанному в вопросе, я дожидаюсь очень долго. –

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