neo4j-spatial:从空间索引中删除节点的官方方法是什么?

时间:2015-10-29 08:40:53

标签: neo4j neo4j-spatial

我的问题肯定是Neo4j Spatial - How To Delete A Node的副本,但尚未解决。

据我所知,从空间索引中删除节点目前尚未在neo4j-spatial-plugin中实现(未记录)。

现在我的问题是:"我如何自己做这个?"我可以看到索引的所有节点,但是如何查询引用我要删除的节点的那个节点?而且:我可以从索引中删除该节点而不会损害其他任何内容吗?

谢谢: - )

1 个答案:

答案 0 :(得分:3)

是。你是对的。正如this link所说,这是一个已知的问题,并且它很长时间以来仍然是开放的。

现在,回答您的问题,您可以按照以下步骤手动执行此操作。

获取要删除的索引节点的内部"id"属性。

  1. 每当将任何节点添加到索引(假设为'geom')时,就会为该节点添加UNIQUE RTREE_REFERENCENEO4J为该引用分配唯一ID。这个分配的“id”不同于用于索引node.e.g的“id”。我们考虑使用id:7577将带有localhost:7474/db/data/node/7577的“用户”节点添加到索引“geom”中。

  2. 现在,在创建此索引之后,您可以使用Neo4j浏览器中的以下命令检查它RTREE_REFERENCEMATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=7577 return b;

  3. 我们需要获取节点“b”的“内部”id,我们可以通过在Neo4j浏览器中触发以下命令来完成此操作。 MATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=7577 return id(b);

  4. 使用“内部”ID

    从索引中删除节点
    1. 让我们从上面的步骤说,我们得到7578作为“内部/实际”id。
    2. 现在,我们可以在服务器上手动触发curl命令,如下所示 curl -X DELETE http://localhost:7474/db/data/index/node/geom/7578
    3. 数据库中的交叉验证

      1. 现在,如果您从Neo4j浏览器重新查询,使用下面相同的查询MATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=7577 return id(b);,您将获得“无行”。因为RTREE_REFERENCE已被删除。
      2. 注意: 上述所有步骤也可以使用Java / .Net / PHP中的任何HttpClient从代码中自动完成。

        希望这能回答你的两个问题

        由于