如何获得第二条短路?

时间:2019-03-14 06:36:07

标签: neo4j

我创建了大图数据库。图包括组织之间的关系。我想在两个节点之间获取短路径。 我通过下一个查询过滤了关系类型

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

获取路径时,我会按其他条件(资本,状态)过滤节点,如果路径不正确,则会应用下一个查询,其中按不良节点进行过滤。

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

在执行第二个查询的过程中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核

0 个答案:

没有答案