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

neo4j-spatial: What is the official way to delete a node from a spatial index?

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

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

现在我的问题是: "How do I do this myself?" 我可以看到索引的所有节点,但是如何查询引用节点的那个节点我想删除?此外:我可以只从索引中删除该节点而不损害其他任何东西吗?

谢谢 :-)

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

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

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

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

  2. 将具有 id:7577 的 "User" 节点添加到索引 "geom"
  3. 现在,创建索引后,您可以在 Neo4j 浏览器中使用以下命令检查它是 RTREE_REFERENCEMATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=7577 return b;

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

使用 "internal" ID 从索引中删除节点

  1. 假设从上面的步骤中,我们得到 7578 作为 "internal/actual" 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);,您将得到 "no rows"。因为 RTREE_REFERENCE 已被删除。

注意: 上述所有步骤也可以通过您的代码自动执行,使用来自 Java/.[=76= 的任何 HttpClient ].

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

谢谢