neo4j空间删除层导致添加的节点已删除.是一个错误还是设计



我正在使用neo4j的Neo4J 3.2使用NEO4J空间插件0.24-neo4j-3.1.1添加图层后,我尝试创建节点,并使用空间添加到索引中。addnode

CALL spatial.addPointLayer('geom');
CREATE (n:Node {latitude:60.1,longitude:15.2})
WITH n
CALL spatial.addNode('geom',n) YIELD node
RETURN node;

我还尝试创建一个新的,然后添加到索引

CREATE (n:Node {latitude:60.1,longitude:55.2});
MATCH (n:Node {latitude:60.1,longitude:55.2})
WITH n
CALL spatial.addNode('geom',n) YIELD node
RETURN node;

稍后我尝试致电

CALL spatial.removeLayer("geom");

该过程删除了所有节点,包括

创建的节点
CREATE (n:Node {latitude:60.1,longitude:55.2});

这是一种辅助行为吗?

如果是,您能否提出任何其他方法来更新/删除索引而不删除位置节点?这里有一个建议的解决方案,但是在更新位置节点更新索引信息时,它似乎是骇客的和错误的。neo4j空间:从空间索引中删除节点的官方方法是什么?

我已经研究了neo4j空间软件包的源代码,以查看addNode和removelayer过程如何实现。

调用addNode时,节点本身将直接添加到rtree中,这意味着它将用作rtree中的叶子节点。

当您致电removelayer时,rtree中的所有内容都将从neo4j中删除,包括所有节点和此rtree中的所有边缘。

由于我没有找到一种无需触摸叶子节点而删除rtree信息的方法,所以我建议以下方式:

要在rtree中添加一个节点时,可以创建一个具有相同位置的新节点(复制原始节点(,并创建一个从原始节点到该新节点的边缘。通过这样做,当您致电removelayer时,只有复制您的节点才会被删除。您的原始节点不会受到影响。费用是您需要花费更多的存储空间。

ps。在这种情况下,当您要致电removelayer时,您需要在调用removelayer之前删除创建的边缘。原因是如果连接到任何边缘,则无法删除一个节点。

最新更新