Neo4j - 是否有Cypher查询语法来列出(显示)数据库中的所有索引?

51

我正在寻找类似于MySQL的(SHOW INDEXES)的功能。我已经使用Python中的py2neo获取了索引列表

graphDB = neo4j.GraphDatabaseService()
indexes = graphDB.get_indexes(neo4j.Node)
print(format(indexes))

但我想知道是否有一种类似的方法可以在Cypher中执行。

6个回答

64

60

目前还没有。在Neo4j 2.0中,引入了更加Cypher友好的索引,并且您可以发出一些DDL命令来创建和删除索引和约束,但截至2.01,就只有这些功能(参见文档)。在1.9中,您无法使用Cypher定义此类模式。

--

除了Cypher之外,还有许多其他方法,例如:

neo4j-shell中,您可以

  • 使用index --indexes列出旧版索引
  • 使用schema列出所有标签的索引和约束
  • 使用schema ls -l :YourLabel列出特定标签的索引和约束

neo4j-browser中,您可以

  • 使用:schema列出所有标签的索引和约束
  • 使用:schema ls -l :YourLabel列出特定标签的索引和约束

大多数允许您执行Cypher查询的API也会提供查询模式的方法,例如:

  • 本机Java API
    • GraphDatabaseService.schema().getConstraints().getIndexes()用于标签模式
    • GraphDatabaseService.index().nodeIndexNames().relationshipIndexNames()用于旧版索引
  • 查询REST调用
    • 对于基于标签的模式,使用/db/data/schema/端点
    • 对于旧版索引,使用/db/data/index/node//db/data/index/relationship/

由于我在Cypher中找不到任何内容,所以我一直在使用shell命令“index --indexes”。 - Bryan Mayes

39

那么:schema命令呢?(在Neo4j shell中只需使用schema)。

在Neo4j 2.0.1中,对我来说运行得非常顺畅。


1
这很有用,但并不是Cypher的实际一部分。 - jjaderberg

14
CALL db.indexes(); 

在 4.2 版本中,新的 SHOW INDEXES 报告已经弃用了。

SHOW INDEXES

3

在Cypher中,你无法做到这一点,但有一个可以工作的REST API请求。

你可以在终端中检查它。

数据库中的所有索引:

curl http://localhost:7474/db/data/schema/index/

特定标签上的索引:

curl http://localhost:7474/db/data/schema/index/User

1

这并不能完全回答你的问题(我也点赞了jjaderberg的答案。)

在py2neo中,有一些关于标签的功能:http://book.py2neo.org/en/latest/schema/

get_index(label) 获取一个标签的索引属性键列表。

FYI,在shell中,你可以使用未记录的schema命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接