подграф после пространственного пересечения в neo4j - PullRequest
0 голосов
/ 28 мая 2018

Я недавно начал использовать neo4j db и его пространственный плагин.

Моя модель данных состоит из 4 различных узлов: Building, Floor, Room и Device.Все они связаны отношением "HAS".

Узел, добавленный к пространственному слою, - это Building.

Вот как это выглядит в данный момент:

data model Чтобы получить все Здания, которые пересекаются в данном многоугольнике, я использую следующий шифр

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

Особенность, которая возвращает одно здание:

enter image description here

Теперь я пытаюсь получить подграфХолдинг от пересеченного здания.Вот моя попытка:

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 *

Это выводит следующий график:

enter image description here

Этот результат похож на то, что я хочу, ноне совсем.Что мне нужно, так это все пересекаемое здание, все его этажи, комнаты и устройства.Этот результат дает только те полы, в которых есть комнаты, и комнаты, в которых есть приборы.Я не знаю, как написать шифр, чтобы получить то, что мне нужно.

Кроме того, предыдущий шифр занимает около 7 секунд для вывода результатов, это время в норме с размером моего фактического графика?Мне кажется, это очень много.

Спасибо!

1 Ответ

0 голосов
/ 28 мая 2018

Вы можете указать шаблон переменной длины:

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