模式信息

要删除、创建或显示索引和约束,可以使用以下过程

限定名称 类型

apoc.schema.assert
apoc.schema.assert(indexes MAP<STRING, LIST<ANY>>, constraints MAP<STRING, LIST<ANY>>, dropExisting BOOLEAN) - 当 dropExisting 为 true(默认为 true)时,删除所有其他现有索引和约束。操作结束时断言给定的索引和唯一约束存在。

过程

apoc.schema.nodes
apoc.schema.nodes(config MAP<STRING, ANY>) - 返回数据库中所有 NODE 标签的索引和约束信息。可以在配置参数中定义要包含或排除的标签集。

过程

apoc.schema.relationships
apoc.schema.relationships(config MAP<STRING, ANY>) - 返回数据库中所有关系类型的索引和约束信息。可以在配置参数中定义要包含或排除的关系类型集。

过程

apoc.schema.node.constraintExists
apoc.schema.node.constraintExists(labelName STRING, propertyName LIST<STRING>) - 根据给定 NODE 标签是否存在具有给定属性名称的约束,返回一个 BOOLEAN 值。

函数

apoc.schema.relationship.constraintExists
apoc.schema.relationship.constraintExists(type STRING, propertyName LIST<STRING>) - 根据给定 RELATIONSHIP 类型是否存在具有给定属性名称的约束,返回一个 BOOLEAN 值。

函数

apoc.schema.node.indexExists
apoc.schema.node.indexExists(labelName STRING, propertyName LIST<STRING>) - 根据给定 NODE 标签是否存在具有给定属性名称的索引,返回一个 BOOLEAN 值。

函数

CALL apoc.schema.assert({indexLabel:[[indexKeys]], ...}, {constraintLabel:[constraintKeys], ...}, dropExisting : true)
YIELD label, key, keys, unique, action

输出结果为

  • 标签

  • 键列表

  • 唯一,如果索引或约束是唯一的

  • 操作,可以是以下值:DROPPED(已删除), CREATED(已创建)

要检索数据库中所有节点标签的索引和约束信息,可以使用以下过程

CALL apoc.schema.nodes()

输出结果为

名称 类型 描述

名称

STRING

索引/约束的名称

标签

STRINGLIST<STRING>

索引/约束的标签(或标签列表)

属性

LIST<STRING>

受索引/约束影响的属性键

状态

STRING

索引可以有以下值之一:ONLINE(在线), POPULATING(正在填充) 和 FAILED(失败)。约束的值为空字符串

类型

STRING

索引或约束类型。可能的值见下表

失败

STRING

如果索引状态为“FAILED”,则返回失败索引的失败消息(与 SHOW INDEX YIELD failureMessage 的输出匹配)。否则,返回“NO FAILURE”

populationProgress

FLOAT

索引扫描的受影响实体百分比(与 SHOW INDEX YIELD populationPercent 的输出匹配)。约束的值为 0.0

大小

INTEGER

受索引影响的实体数量。约束的值为 0

valuesSelectivity

FLOAT

现有独立属性值数量除以 size

例如,对于索引 CREATE INDEX FOR (n:Node) ON (n.foo),独立属性值的数量是 MATCH (n:Node) RETURN count(DISTINCT n.foo)

约束的值为 0.0

userDescription

STRING

索引/约束的描述

type 结果可以是以下值之一

表 1. type 输出
名称 模式类型

"UNIQUENESS"

唯一节点属性约束

"NODE_PROPERTY_EXISTENCE"

节点属性存在性约束

"NODE_KEY"

节点键约束

"FULLTEXT"

全文索引

"TEXT"

文本索引

"RANGE"

范围索引

"POINT"

点索引

"LOOKUP"

查找索引

要检索数据库中所有关系类型的索引和约束信息,可以使用以下过程

CALL apoc.schema.relationships()

输出结果为

名称 类型 描述

名称

STRING

索引/约束的名称

类型

STRING

索引或约束类型。可能的值见下表

属性

LIST<STRING>

受索引/约束影响的属性键

状态

STRING

索引可以有以下值之一:ONLINE(在线), POPULATING(正在填充) 和 FAILED(失败)。约束的值为空字符串

relationshipType

STRINGLIST<STRING>

索引/约束的类型(或类型列表)

type 结果可以是以下值之一

表 2. type 输出
名称 模式类型

"RELATIONSHIP_PROPERTY_EXISTENCE"

关系属性存在性约束

"FULLTEXT"

全文索引

"TEXT"

文本索引

"RANGE"

范围索引

"POINT"

点索引

"LOOKUP"

查找索引

CALL apoc.schema.nodes({labels:['Book']})

注意:节点和关系上的属性存在性约束仅适用于企业版。

要检索节点上是否存在索引,可以使用以下用户函数

RETURN apoc.schema.node.indexExists(labelName, propertyNames)

输出返回节点上是否存在索引

要检索节点上是否存在约束,可以使用以下用户函数

RETURN apoc.schema.node.constraintExists(labelName, propertyNames)

输出返回节点上是否存在约束。

要检索关系上是否存在约束,可以使用以下用户函数

RETURN apoc.schema.relationship.constraintExists(type, propertyNames)

输出返回关系上是否存在约束

示例

列出模式断言

当您运行以下查询时

CALL apoc.schema.assert({Foo:['bar']},null)

您将收到此结果

apoc.schema.assert.index

当您运行以下查询时

CALL apoc.schema.assert(null,{Foo:['bar']})

您将收到此结果

apoc.schema.assert.constraint

当您运行以下查询时

CALL apoc.schema.assert(null,null)

您将收到此结果

apoc.schema.assert.drop

列出节点的索引和约束

给定以下 Cypher 语句

CREATE CONSTRAINT FOR (bar:Bar) REQUIRE bar.foobar IS NOT NULL
CREATE CONSTRAINT FOR (bar:Bar) REQUIRE bar.foo IS UNIQUE
CREATE INDEX FOR (n:Person) ON (n.name)
CREATE INDEX FOR (n:Publication) ON (n.name)
CREATE INDEX FOR (n:Source) ON (n.name)

当您运行以下查询时

CALL apoc.schema.nodes()

您将收到此结果

apoc.schema.nodes

列出关系的约束

给定以下 Cypher 语句

CREATE CONSTRAINT FOR ()-[like:LIKED]-() REQUIRE like.day IS NOT NULL
CREATE CONSTRAINT FOR ()-[starred:STARRED]-() REQUIRE starred.month IS NOT NULL

当您运行以下查询时

CALL apoc.schema.relationships()

您将收到此结果

apoc.schema.relationships

检查标签和属性是否存在索引或约束

给定以前的索引定义,运行此语句

RETURN apoc.schema.node.indexExists("Publication", ["name"])

产生以下输出

apoc.schema.node.indexExists

给定以前的约束定义,运行此语句

RETURN apoc.schema.node.constraintExists("Bar", ["foobar"])

产生以下输出

apoc.schema.node.constraintExists

如果您想检查关系是否存在约束,可以运行此语句

RETURN apoc.schema.relationship.constraintExists('LIKED', ['day'])

您将得到以下结果

apoc.schema.relationship.constraintExists