我创建了大图数据库。图包括组织之间的关系。我想在两个节点之间获取短路径。 我通过下一个查询过滤了关系类型
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 KiB
Label Store 16.02 KiB
索引存储9.27 GiB
Schema Store 8.01 KiB
阵列存储8.01 KiB
逻辑日志16.53 MiB
节点存储1.18 GiB
属性商店20.33 GiB
关系存储8.79 GiB
字符串存储18.73 GiB
商店总大小58.56 GiB
ID分配
节点ID 84686407
商品ID 532508736
关系ID 276570526
关系类型ID 13
容器内存限制 122880mb
处理器 32核