【问题标题】:(neo4j) Is it possible to remove a Node from an Index via Cypher, REST or Webadmin console?(neo4j) 是否可以通过 Cypher、REST 或 Webadmin 控制台从索引中删除节点?
【发布时间】:2013-09-01 16:29:09
【问题描述】:

参考这两个 stackoverflow 问题:

  1. Delete old nodes and relationships with Cypher in Neo4j 1.9
  2. Deleting indexed nodes in Neo4j

我有一个图表,其中许多节点在索引中不正确。我认为这是因为使用 Cypher 或使用 Webadmin 控制台上的 Delete 按钮删除了节点,而没有意识到这不会同时从它所在的任何索引中删除节点。

结果是,对于使用这些索引作为起始节点的查询,这些节点现在被错误地返回。

是否可以使用 Cypher、REST API 或 Webadmin 控制台从索引中删除节点?

或者我将不得不编写一些自定义 Java(我正在使用嵌入式模式),它执行以下操作:

Iterable<Node> offendingNodes;
Iterable<Index<Node>> allIndexes;
for(Node offendingNode : offendingNodes) {
    for(Index<Node> index : allIndexes) {
        index.remove(offendingNode);
    }
}
// Now re-index offendingNodes correctly

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    您可以使用 REST 从索引中删除节点,如下所示:

    删除 http://[address]:[port]db/data/index/node/[indexname]/[nodeid]

    REST API - Indexes

    【讨论】:

    • 通过 Webadmin 使用 REST API,当我发出此命令时,响应为 204 No Content。这是正确的/预期的吗?
    • 另外,我发现指定的节点仍然可以通过索引找到。换句话说,它没有工作:-(
    • 204 没有内容应该是正确的响应。您可以在可访问的控制台中设置机箱吗?
    • 您的意思是在公共 URL 上打开服务器吗?恐怕我做不到。我能做的最好的就是尝试发布命令和响应。我正在使用一个 Cypher 查询,它隔离了 11 个节点(数百万个),这些节点不应该在该索引中(通过 neo4j-shell 和 webadmin 获得相同的结果)START p=node:profiles('profile_url:*') WHERE NOT(HAS(p.type)) RETURN ID(p)。然后执行 REST 命令,例如 DELETE /db/data/index/node/profiles/node/profiles/3339739,其中 3339739 是返回的节点 ID 之一。 (通过 webadmin 或命令行“resty”得到相同的结果)。
    • 不,不是要打开你的服务器,只是创建一个公开可见的隔离案例。无论如何很高兴它解决了:D
    猜你喜欢
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多