Neo4j:在所有标签上创建索引

时间:2017-03-14 10:00:48

标签: indexing neo4j cypher

我尝试在DB

中的所有标签上创建索引

这就是我所拥有的:

CALL db.labels()
YIELD label
CREATE INDEX ON :label(objectID)

但这会出错:

  

输入无效' N':预期&#p; P' (第3行,第15栏(抵消:44))   " CREATE INDEX ON:label(webint_keys_objectID)"

1 个答案:

答案 0 :(得分:1)

您不能在匹配,创建或架构操作中为标签使用变量。您必须使用实际标签进行这些操作。

有一种方法可以使用apoc.schema.assert()使用call db.labels() yield label with label, ['objectID'] as indexProp with collect(label) as labels, collect(indexProp) as indexProps with apoc.map.fromLists(labels, indexProps) as indexMap call apoc.schema.assert(indexMap,{}) yield label, key, unique, action return label, key, unique, action 添加带有动态标签的索引,但是它会删除assert()调用中不存在的所有索引和约束。这需要将db.labels()中的标签转换为映射的键,因此,您需要其他APOC过程进行该操作。

由于索引和约束只需要创建一次,因此通常最好手动执行这些操作。

但如果你确实需要这样的查询,这应该可以解决问题:

forEach { ... }