#neo4j
#neo4j
Вопрос:
Я создал большую базу данных graph. График включает отношения между организациями. Я хотел бы получить короткий путь между двумя узлами. Я отфильтровал типы связей по следующему запросу
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
Фильтры по связям не могут быть объединены, потому что они могли бы использовать другие фильтры.
Мой план выполнения по этому запросу
Когда я получаю пути, я фильтрую узлы по другим условиям (капитал, статус), и если я получаю неправильные пути, я применяю следующий запрос с фильтром по плохим узлам.
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
Второй запрос плана выполнения
В процессе выполнения второго запроса neo4j перестает отвечать, и я должен перезапустить контейнер
Версия Neo4j 3.4.7
Размеры хранилища
Количество сохраненных данных 5,69 Кб
Хранилище ярлыков 16,02 Кб
Хранилище индексов 9,27 Гигабайт
Хранилище схемы 8,01 Кб
Хранилище массива 8,01 Кб
Логический журнал размером 16,53 МБ
Хранилище узлов 1.18 Гигабайт
Хранилище свойств 20,33 гигабайт
Хранилище отношений 8,79 гигабайт
Хранилище строк 18,73 гигабайта
Общий размер хранилища 58,56 гигабайт
Выделение идентификатора
Идентификатор узла 84686407
Идентификатор свойства 532508736
Идентификатор отношения 276570526
Идентификатор типа связи 13
Ограничение памяти контейнера 122880 мб
Процессор 32-ядерный