Neo4j:仅当不存在时如何调用“CREATE INDEX”

Tom*_*ugh 2 neo4j cypher

CREATE INDEX <indexName>命令不是幂等的,如果给定的索引已经存在,则会导致错误。我是 neo4j 的新手,找不到可以避免此错误的谓词。我尝试了 的各种排列ANY(...),它们都在“db.indexes()”处呕吐。

由于CREATE INDEX ...如果索引存在则DROP INDEX ...失败,如果不存在则失败,我不知道如何编写仅在需要时创建索引的 .cypher 文件。

简写形式可能类似于CREATE INDEX indexName FOR (c:SomeLabel) ON (c.someProperty) IF NOT EXISTS,但当然这种简写形式不存在。

有没有办法用谓词、子查询或一些这样的表达式来做到这一点?

小智 6

从 Neo4j 4.1.3 开始,引入了新的索引创建语法来做到这一点

CREATE INDEX myIndex IF NOT EXISTS FOR (t:Test) ON (t.id)


Tom*_*ugh 0

我尝试了这两种建议,但都没有解决我的问题。我没有时间通过​​反复试验来发现如何在我的环境中安装 APOC。

mbh86 的答案的第一行是不准确的,至少在我的系统中是这样。该命令不会被忽略,它会失败并出现错误。因此,如果同一个密码脚本中有其他内容,它将失败。

显然,我能做的最好的事情就是将 CREATE INDEX 包装在命令行字符串中,从 bash 或 python 脚本运行该字符串,运行它,然后检查调用程序的返回代码。

我感谢两位评论员的努力,我不想让任何一位评论员悬而未决。