模式信息

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

限定名称 类型

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

其输出为

  • 标签 (label)

  • 键 (key)

  • keys,键列表

  • unique,索引或约束是否唯一

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

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

CALL apoc.schema.nodes()

其输出为

名称 (name) type description(描述)

名称 (name)

STRING

索引/约束的名称

标签 (label)

STRINGLIST<STRING>

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

属性

LIST<STRING>

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

状态 (status)

STRING

索引可以具有以下值之一:ONLINE, POPULATINGFAILED。约束的值为空字符串

type

STRING

索引或约束类型。请参阅下表了解可能的值

failure

STRING

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

populationProgress

FLOAT

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

size

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 输出
名称 (name) 模式类型

"UNIQUENESS"

唯一节点属性约束

"NODE_PROPERTY_EXISTENCE"

节点属性存在性约束

"NODE_KEY"

节点键约束

"FULLTEXT"

全文索引

"TEXT"

文本索引

"RANGE"

范围索引 (Range index)

"POINT"

空间点索引 (Point index)

"LOOKUP"

查找索引 (Lookup index)

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

CALL apoc.schema.relationships()

其输出为

名称 (name) type description(描述)

名称 (name)

STRING

索引/约束的名称

type

STRING

索引或约束类型。请参阅下表了解可能的值

属性

LIST<STRING>

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

状态 (status)

STRING

索引可以具有以下值之一:ONLINE, POPULATINGFAILED。约束的值为空字符串

关系类型 (relationshipType)

STRINGLIST<STRING>

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

type 结果可以是以下值之一:

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

"RELATIONSHIP_PROPERTY_EXISTENCE"

关系属性存在性约束

"FULLTEXT"

全文索引

"TEXT"

文本索引

"RANGE"

范围索引 (Range index)

"POINT"

空间点索引 (Point index)

"LOOKUP"

查找索引 (Lookup index)

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