1

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

据我了解,从空间索引中删除节点当前未在 neo4j-spatial-plugin 中实现(未记录)。

现在我的问题是: “我自己该怎么做?” 我可以看到索引的所有节点,但是如何查询引用我要删除的节点的那个节点?此外:我可以从索引中删除该节点而不损害其他任何东西吗?

谢谢 :-)

4

1 回答 1

3

是的。你是对的。正如这个链接所说,这是一个已知问题,并且很长时间以来它仍然处于打开状态。

现在,谈到您的问题,您可以按照以下步骤手动完成。

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

  1. 每当将任何节点添加到索引(假设为“geom”)时,UNIQUE RTREE_REFERENCE都会将 a 添加到该节点。NEO4J为该引用分配一个唯一的 id。这个分配的“id”不同于用于索引节点的“id”。例如,让我们考虑将“用户”节点id:7577添加到索引“geom”中,使用localhost:7474/db/data/node/7577.

  2. 现在,创建此索引后,您可以RTREE_REFERENCE在 Neo4j 浏览器中使用以下命令检查它。MATCH (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);

使用“内部”ID 从索引中删除节点

  1. 假设从上面的步骤,我们得到 7578 作为“内部/实际”ID。
  2. 现在,我们可以在服务器上手动触发 curl 命令,如下所示 curl -X DELETE http://localhost:7474/db/data/index/node/geom/7578

数据库中的交叉验证

  1. 现在,如果您从 Neo4j 浏览器重新查询,使用下面的相同查询MATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=7577 return id(b);,您将得到“无行”。因为RTREE_REFERENCE已被删除。

注意: 上述所有步骤也可以从您的代码中自动化,使用来自 Java/.Net/PHP 的任何 HttpClient。

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

谢谢

于 2016-04-21T08:08:21.373 回答