2017-02-13 3 views
0

поэтому я загрузил набор данных в Neo4j с чем-то вроде 10 MM узлов. Я ищу решение проблемы с двумя узлами, поиск кратчайшего пути, исключая подмножество типов отношений. Вот пример попытки запроса:neo4j оптимизация shortestpath большое количество узлов

match (p1:PT)-[*]-(p2:PT{src:"8"}), 
p=shortestPath((p1)-[*..20]-(p2)) 
with p where p1.src is not null 
and NONE (n in nodes(p) where labels(n) in [["X"],["Y"],["FX","RX"],["RX","FX"]]) 
return p limit 5000 

Запрос длится вечно (эффективно). Насколько я понимаю, запрос будет принимать все пары p1, p2, для которых существует некоторая взаимосвязь, определить самый короткий путь между каждой парой, удалить кратчайшие пути, которые выходят из последнего предложения, и возвращать до 5000 таких путей, если они существуют.

Итак, я хотел бы знать, если 1) кто-то видит более эффективный способ сделать это, и 2) Если бы я хотел выбрать самый короткий путь из тех, которые удовлетворяют этому последнему предложению, как будет изменен запрос? Большое спасибо за любую помощь.

ответ

0

Try:

MATCH (p2:PT {src:"8"}) 
MATCH p=shortestPath((p1:PT)-[*..20]-(p2)) 
WHERE p1.src IS NOT NULL 
AND none(n in nodes(p) where labels(n) in [["X"],["Y"],["FX","RX"],["RX","FX"]]) 
RETURN p LIMIT 5000; 

Это должно быть немного лучше. (p1:PT)-[*]-(p2:PT {src: "8"}) будет соответствовать по все пути подключены к p2, любой длины. Кроме того, удаление инструкции WITH позволит ввести предикаты в критерии shortestPath.

Есть ли еще какие-либо критерии, чтобы более узко указать p1, кроме того, что у него есть метка PT и это src недвижимость не имеет значения?

+0

Спасибо, Уильям - все еще довольно вяло, я боюсь, но ваш запрос имеет смысл. –

+0

У вас есть индекс на ': PT (src)'? –

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