Я создал большую базу данных графа.График включает в себя отношения между организациями.Я хотел бы получить короткий путь между двумя узлами.Я отфильтровал типы отношений по следующему запросу
MATCH (o:Organization) WHERE Id(o) = 23806112
MATCH (o1:Organization) WHERE Id(o1) = 24385058
MATCH p = allShortestPaths((o)-[*1..10]-(o1)) WHERE
ALL (r IN RELATIONSHIPS(p) WHERE
(type(r) = 'OrganizationFounderOrganization' AND r.DateFrom <= datetime('2019-03-13') )
OR (type(r) = 'OrganizationFounderPerson' AND r.DateFrom <= datetime('2019-03-13') )
OR (type(r) = 'OrganizationChief' AND r.DateFrom <= datetime('2019-03-13') )
OR (type(r) = 'OrganizationManagingCompany' AND r.DateFrom <= datetime('2019-03-13') )
OR (type(r) = 'OrganizationPhone')
OR (type(r) = 'OrganizationAddress' AND NOT EXISTS(r.DateTo) )
)
RETURN p SKIP 0 LIMIT 30
Фильтры по отношениям не могут быть объединены, поскольку они могут использовать другие фильтры.Мой план выполнения по этому запросу
http://joxi.ru/E2pNPDDH9Rpger
![Execution plan 1](https://i.stack.imgur.com/Cq0su.jpg)
Когда я получаю пути, я фильтрую узлы по другим условиям (заглавная,статус) и если я получаю неправильные пути, я применяю следующий запрос с фильтром по плохим узлам.
MATCH (o:Organization) WHERE Id(o) = 23806112
MATCH (o1:Organization) WHERE Id(o1) = 24385058
MATCH p = allShortestPaths((o)-[*1..10]-(o1)) WHERE
ALL (r IN RELATIONSHIPS(p) WHERE
(type(r) = 'OrganizationFounderOrganization' AND r.DateFrom <= datetime('2019-03-13') )
OR (type(r) = 'OrganizationFounderPerson' AND r.DateFrom <= datetime('2019-03-13') )
OR (type(r) = 'OrganizationChief' AND r.DateFrom <= datetime('2019-03-13') )
OR (type(r) = 'OrganizationManagingCompany' AND r.DateFrom <= datetime('2019-03-13') )
OR (type(r) = 'OrganizationPhone')
OR (type(r) = 'OrganizationAddress' AND NOT EXISTS(r.DateTo) )
)
AND ALL (n IN NODES(p) WHERE NOT Id(n) IN [15665,1557884,7888953]
RETURN p SKIP 0 LIMIT 30
Второй запрос плана выполнения
http://joxi.ru/KAxWPDDcMJGyY2
![Execution plan 2](https://i.stack.imgur.com/JM1Bf.jpg)
В процессе выполнения второго запроса neo4j перестает отвечать на запросы, и я должен перезапустить контейнер
Версия Neo4j 3.4.7
Размеры магазина
Подсчет магазина 5,69 КиБ
Магазин этикеток 16,02 КиБ
Индекс магазина 9,27 ГиБ
Схема магазина 8,01 КиБ
Array Store 8.01 КиБ
Логический журнал 16.53 МиБ
Узел Store 1.18 GiB
Магазин недвижимости 20.33 GiB
Магазин отношений 8.79 GiB
String Store 18,73 ГБ
Общий размер магазина 58,56 ГБ
Распределение идентификаторов
ID узла 84686407
Свойство ID 532508736
Идентификатор отношения 276570526
Идентификатор типа связи 13
Предел памяти контейнера 122880mb
Процессор 32 ядра