我正在使用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之前删除创建的边缘。原因是如果连接到任何边缘,则无法删除一个节点。