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"
属性。
每当将任何节点添加到索引(假设 'geom')时,都会为该节点添加一个 UNIQUE RTREE_REFERENCE
。 NEO4J
为该引用分配一个唯一的 ID。此分配的 "id" 与用于索引 node.e.g 的 "id" 不同。让我们考虑使用 localhost:7474/db/data/node/7577
.
将具有 id:7577
的 "User" 节点添加到索引 "geom"
现在,创建索引后,您可以在 Neo4j 浏览器中使用以下命令检查它是 RTREE_REFERENCE
。MATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=7577 return b;
我们需要获取节点 "b" 的 "internal" id,我们可以通过在 Neo4j 浏览器中执行以下命令来完成此操作。 MATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=7577 return id(b);
使用 "internal" ID 从索引中删除节点
- 假设从上面的步骤中,我们得到 7578 作为 "internal/actual" id。
- 现在,我们可以在服务器上手动触发 curl 命令,如下所示
curl -X DELETE http://localhost:7474/db/data/index/node/geom/7578
在数据库中交叉验证
- 现在,如果您从 Neo4j 浏览器重新查询,使用下面相同的查询
MATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=7577 return id(b);
,您将得到 "no rows"。因为 RTREE_REFERENCE
已被删除。
注意: 上述所有步骤也可以通过您的代码自动执行,使用来自 Java/.[=76= 的任何 HttpClient ].
希望这能回答您的两个问题
谢谢
我的问题肯定是 Neo4j Spatial - How To Delete A Node 的重复问题,但尚未解决。
据我了解,从空间索引中删除节点目前在 neo4j-spatial-plugin 中尚未实现(未记录)。
现在我的问题是: "How do I do this myself?" 我可以看到索引的所有节点,但是如何查询引用节点的那个节点我想删除?此外:我可以只从索引中删除该节点而不损害其他任何东西吗?
谢谢 :-)
是的。你是对的。正如 this link 所说,这是一个已知问题,并且很长时间以来仍然存在。
现在,对于您的问题,您可以按照以下步骤手动完成。
获取要删除的索引节点的内部 "id"
属性。
每当将任何节点添加到索引(假设 'geom')时,都会为该节点添加一个
UNIQUE RTREE_REFERENCE
。NEO4J
为该引用分配一个唯一的 ID。此分配的 "id" 与用于索引 node.e.g 的 "id" 不同。让我们考虑使用localhost:7474/db/data/node/7577
. 将具有 现在,创建索引后,您可以在 Neo4j 浏览器中使用以下命令检查它是
RTREE_REFERENCE
。MATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=7577 return b;
我们需要获取节点 "b" 的 "internal" id,我们可以通过在 Neo4j 浏览器中执行以下命令来完成此操作。
MATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=7577 return id(b);
id:7577
的 "User" 节点添加到索引 "geom"
使用 "internal" ID 从索引中删除节点
- 假设从上面的步骤中,我们得到 7578 作为 "internal/actual" id。
- 现在,我们可以在服务器上手动触发 curl 命令,如下所示 curl -X DELETE http://localhost:7474/db/data/index/node/geom/7578
在数据库中交叉验证
- 现在,如果您从 Neo4j 浏览器重新查询,使用下面相同的查询
MATCH (a)-[:RTREE_REFERENCE]->(b) where b.id=7577 return id(b);
,您将得到 "no rows"。因为RTREE_REFERENCE
已被删除。
注意: 上述所有步骤也可以通过您的代码自动执行,使用来自 Java/.[=76= 的任何 HttpClient ].
希望这能回答您的两个问题
谢谢