模式信息

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

限定名称 类型

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)

STRING 或 LIST<STRING>

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

属性

LIST<STRING>

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

状态 (status)

STRING

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

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, POPULATING 和 FAILED。约束的值为空字符串

关系类型 (relationshipType)

STRING 或 LIST<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
© . This site is unofficial and not affiliated with Neo4j, Inc.