【问题标题】:How to delete all indexes in neo4j?如何删除neo4j中的所有索引?
【发布时间】:2019-03-06 17:08:14
【问题描述】:

我想批量删除所有使用 cypher 存在的索引,可以这样做吗?我正在使用 neo4j 3.4.7。

DROP INDEX  ON :Label(attributename)

如果我在稍后阶段创建相同的索引,它会替换现有索引吗?

【问题讨论】:

标签: neo4j cypher spring-data-neo4j


【解决方案1】:

对于 3.x 版,您可以使用内置程序 Neo4j 来确定您想要的索引。您可以从网络浏览器发送密码查询:

CALL db.indexes() - 列出数据库中的所有索引。

CALL db.index.fulltext.drop() - 删除指定索引。

CALL db.index.explicit.drop() - 删除显式索引 - YIELD 类型、名称、配置

最新版本here User management for Neo4j 的所有可能的内置过程和参数

旧式使用 CIPHER :

删除索引:labelOfNode(propertyOfNode)

在 :labelOfNode(propertyOfNode) 上创建索引

【讨论】:

  • 注意:这些删除程序仅在企业版中可用。
【解决方案2】:

删除所有索引和约束的快速方法是使用 APOC 过程 apoc.schema.assert,如下所示:

CALL apoc.schema.assert({},{},true) YIELD label, key
RETURN *

该过程主要是为了确保数据库具有在前2个映射中传递的索引和约束,但第三个参数决定是否删除任何其他索引和约束。在上面的查询中,前 2 个映射是空的,所以最终的结果是所有的索引和约束都被删除了。

【讨论】:

  • 请注意,这不适用于复合索引或节点键约束,我也不认为它适用于属性存在约束。
  • 能否检查 cypher 中是否存在索引? @cybersam
  • Cypher 语言本身无法检查索引是否存在。但是APOC插件有几个procedures for getting index/constraint info。特别是,apoc.schema.node.indexExists() 会告诉您是否存在特定索引。
  • 可以通过以下方式检查索引是否存在:如果属性索引存在则返回一行,否则返回零行。 ` CALL db.indexes() YIELD description WHERE description = "INDEX ON :Publication(source_id)" RETURN *; `
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
相关资源
最近更新 更多