Neo4j 中空间相交后的子图

sub graph after a spatial intersection in neo4j

我最近开始使用 neo4j db 及其空间插件。

我的数据模型由 4 个不同的节点组成:建筑物、楼层、房间和设备。所有这些都通过 "HAS".

关系关联

添加到空间层的节点是Building。

这是此刻的样子:

为了获得在给定多边形中相交的所有建筑物,我正在使用下一个密码

WITH 'POLYGON((-6.342523097991944 39.47879396554205, -6.339948177337647 
39.47879396554205, -6.339948177337647 39.478121118127696, 
-6.342523097991944 39.478121118127696, -6.342523097991944 
39.47879396554205))' as polygon
CALL spatial.intersects('geom',polygon) YIELD node
RETURN node

returns 一栋建筑的特殊性:

现在,我要做的是从相交的建筑物中获取子图。这是我的尝试:

WITH 'POLYGON((-6.342523097991944 39.47879396554205, -6.339948177337647 
39.47879396554205, -6.339948177337647 39.478121118127696, -6.342523097991944 
39.478121118127696, -6.342523097991944 39.47879396554205))' as polygon
CALL spatial.intersects('geom',polygon) YIELD node
MATCH (node)-[:HAS]->(Floor)-[:HAS]->(Room)-[:HAS]->(Device)
RETURN *

输出下一张图:

结果与我想要的相似,但不完全相同。我需要的是所有相交的建筑,它的所有楼层、房间和设备。这个结果只给我有房间的楼层和有设备的房间。我不知道如何编写密码来获得我需要的东西。

除此之外,之前的密码大约需要7秒才能输出结果,这个时间是否符合我实际图表的大小?对我来说似乎很多。

谢谢!

您可以指定可变长度模式:

...
CALL spatial.intersects('geom',polygon) YIELD node
MATCH (node)-[:HAS*0..3]->(Item)
RETURN Item